mirror of https://github.com/vladmandic/human
5038 lines
1.3 MiB
5038 lines
1.3 MiB
|
|
/*
|
|
Human library
|
|
homepage: <https://github.com/vladmandic/human>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
var z4=Object.create,ph=Object.defineProperty,P4=Object.getPrototypeOf,L4=Object.prototype.hasOwnProperty,W4=Object.getOwnPropertyNames,B4=Object.getOwnPropertyDescriptor,Nf=e=>ph(e,"__esModule",{value:!0}),O2=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),Ir=(e,t)=>{for(var n in t)ph(e,n,{get:t[n],enumerable:!0})},V4=(e,t,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of W4(t))!L4.call(e,r)&&r!=="default"&&ph(e,r,{get:()=>t[r],enumerable:!(n=B4(t,r))||n.enumerable});return e},fh=e=>e&&e.__esModule?e:V4(Nf(ph(e!=null?z4(P4(e)):{},"default",{value:e,enumerable:!0})),e),G4=O2(e=>{Nf(e),Ir(e,{MediaPipeFaceMesh:()=>t,load:()=>r});var t=class{constructor(a,s,i,o){this.facePipeline=new j4(a,s,i,o),this.config=o}async estimateFaces(a,s){let i=await this.facePipeline.predict(a,s),o=[];for(let l of i||[]){if(l.isDisposedInternal)continue;let c=l.coords?l.coords.arraySync():null,u=l.rawCoords,h={};if(c&&c.length>0)for(let f of Object.keys(da))h[f]=da[f].map(m=>c[m]);let d=s.face.mesh.returnRawData&&l.box?{topLeft:l.box.startPoint,bottomRight:l.box.endPoint}:null,p=l.box?[Math.max(0,l.box.startPoint[0]),Math.max(0,l.box.startPoint[1]),Math.min(a.shape[2],l.box.endPoint[0])-l.box.startPoint[0],Math.min(a.shape[1],l.box.endPoint[1])-l.box.startPoint[1]]:0;o.push({confidence:l.confidence||0,box:p,mesh:c,boxRaw:d,meshRaw:u,annotations:h,image:l.image?Nr(l.image):null}),l.coords&&l.coords.dispose(),l.image&&l.image.dispose()}return o}},n=[null,null,null];async function r(a){n=await Promise.all([!n[0]&&a.face.enabled?U4(a):null,!n[1]&&a.face.mesh.enabled?Zn(a.face.mesh.modelPath,{fromTFHub:a.face.mesh.modelPath.includes("tfhub.dev")}):null,!n[2]&&a.face.iris.enabled?Zn(a.face.iris.modelPath,{fromTFHub:a.face.iris.modelPath.includes("tfhub.dev")}):null]);let s=new t(n[0],n[1],n[2],a);return a.face.mesh.enabled&&Ue(`load model: ${a.face.mesh.modelPath.match(/\/(.*)\./)[1]}`),a.face.iris.enabled&&Ue(`load model: ${a.face.iris.modelPath.match(/\/(.*)\./)[1]}`),s}e.triangulation=H4}),Sf=O2(e=>{Nf(e),Ir(e,{NUM_KEYPOINTS:()=>n,connectedPartIndices:()=>s,partChannels:()=>o,partIds:()=>r,partNames:()=>t,poseChain:()=>i});var t=["nose","leftEye","rightEye","leftEar","rightEar","leftShoulder","rightShoulder","leftElbow","rightElbow","leftWrist","rightWrist","leftHip","rightHip","leftKnee","rightKnee","leftAnkle","rightAnkle"],n=e.partNames.length,r=e.partNames.reduce((l,c,u)=>(l[c]=u,l),{}),a=[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]],s=a.map(([l,c])=>[r[l],r[c]]),i=[["nose","leftEye"],["leftEye","leftEar"],["nose","rightEye"],["rightEye","rightEar"],["nose","leftShoulder"],["leftShoulder","leftElbow"],["leftElbow","leftWrist"],["leftShoulder","leftHip"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["nose","rightShoulder"],["rightShoulder","rightElbow"],["rightElbow","rightWrist"],["rightShoulder","rightHip"],["rightHip","rightKnee"],["rightKnee","rightAnkle"]],o=["left_face","right_face","right_upper_leg_front","right_lower_leg_back","right_upper_leg_back","left_lower_leg_front","left_upper_leg_front","left_upper_leg_back","left_lower_leg_back","right_feet","right_lower_leg_front","left_feet","torso_front","torso_back","right_upper_arm_front","right_upper_arm_back","right_lower_arm_back","left_lower_arm_front","left_upper_arm_front","left_upper_arm_back","left_lower_arm_back","right_hand","right_lower_arm_front","left_hand"]});function Ue(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;e&&console.log(n,"Human:",...e)}var z2={};Ir(z2,{Abs:()=>Li,Acos:()=>Wi,Acosh:()=>Bi,AdadeltaOptimizer:()=>Id,AdagradOptimizer:()=>Nd,AdamOptimizer:()=>Sd,AdamaxOptimizer:()=>Td,Add:()=>fa,AddN:()=>Ka,All:()=>Ah,Any:()=>yh,ArgMax:()=>Za,ArgMin:()=>ru,Asin:()=>Vi,Asinh:()=>Ui,Atan:()=>Hi,Atan2:()=>Gi,Atanh:()=>ji,AvgPool:()=>Ja,AvgPool3D:()=>au,AvgPool3DGrad:()=>xh,AvgPoolGrad:()=>gh,BackendWasm:()=>N0,BatchMatMul:()=>Ya,BatchToSpaceND:()=>su,Bincount:()=>wh,BroadcastTo:()=>L2,Callback:()=>L0,CallbackList:()=>F0,Cast:()=>Qa,Ceil:()=>es,ClipByValue:()=>ma,Complex:()=>_h,ComplexAbs:()=>iu,Concat:()=>qi,Conv2D:()=>ts,Conv2DBackpropFilter:()=>bh,Conv2DBackpropInput:()=>ns,Conv3D:()=>ou,Conv3DBackpropFilterV2:()=>vh,Conv3DBackpropInputV2:()=>kh,Cos:()=>rs,Cosh:()=>Xi,CropAndResize:()=>Ki,Cumsum:()=>as,CustomCallback:()=>$0,DataStorage:()=>mh,DenseBincount:()=>Ih,DepthToSpace:()=>Zi,DepthwiseConv2dNative:()=>ss,DepthwiseConv2dNativeBackpropFilter:()=>Nh,DepthwiseConv2dNativeBackpropInput:()=>Sh,Diag:()=>Th,Dilation2D:()=>lu,Dilation2DBackpropFilter:()=>Ch,Dilation2DBackpropInput:()=>Eh,ENV:()=>pa,EarlyStopping:()=>W0,Elu:()=>Ji,EluGrad:()=>Rh,Environment:()=>P2,Equal:()=>Qi,Erf:()=>Yi,Exp:()=>os,ExpandDims:()=>eo,Expm1:()=>to,FFT:()=>Fh,Fill:()=>uu,FlipLeftRight:()=>no,Floor:()=>ls,FloorDiv:()=>us,FromPixels:()=>Gh,FusedBatchNorm:()=>cs,FusedConv2D:()=>Vs,FusedDepthwiseConv2D:()=>Us,GPGPUContext:()=>Am,GatherNd:()=>ao,GatherV2:()=>ro,GraphModel:()=>B0,Greater:()=>so,GreaterEqual:()=>hs,History:()=>M0,IFFT:()=>Mh,Identity:()=>ds,Imag:()=>$h,InputSpec:()=>Vt,IsFinite:()=>io,IsInf:()=>oo,IsNan:()=>lo,KernelBackend:()=>nu,LRN:()=>du,LRNGrad:()=>Oh,LayerVariable:()=>R0,LayersModel:()=>Qr,LeakyRelu:()=>ps,Less:()=>uo,LessEqual:()=>co,LinSpace:()=>Dh,Log:()=>fs,Log1p:()=>ho,LogSoftmax:()=>W2,LogicalAnd:()=>po,LogicalNot:()=>cu,LogicalOr:()=>hu,MathBackendCPU:()=>Fd,MathBackendWebGL:()=>Vu,Max:()=>ms,MaxPool:()=>ys,MaxPool3D:()=>pu,MaxPool3DGrad:()=>Ph,MaxPoolGrad:()=>zh,MaxPoolWithArgmax:()=>Lh,Maximum:()=>As,Mean:()=>gs,Min:()=>xs,Minimum:()=>ws,MirrorPad:()=>fu,Mod:()=>fo,MomentumOptimizer:()=>Ed,Multinomial:()=>Wh,Multiply:()=>_s,Neg:()=>mo,NonMaxSuppressionV3:()=>yo,NonMaxSuppressionV4:()=>go,NonMaxSuppressionV5:()=>xo,NotEqual:()=>Ao,OP_SCOPE_SUFFIX:()=>V2,OneHot:()=>bs,OnesLike:()=>wo,Optimizer:()=>Yr,Pack:()=>_o,PadV2:()=>vs,Pool:()=>q4,Pow:()=>ks,Prelu:()=>Is,Prod:()=>bo,RMSPropOptimizer:()=>Cd,RNN:()=>Mr,Range:()=>mu,Rank:()=>Ef,Real:()=>Bh,RealDiv:()=>is,Reciprocal:()=>vo,Reduction:()=>sn,Relu:()=>Ns,Relu6:()=>Ts,Reshape:()=>ko,ResizeBilinear:()=>Ss,ResizeBilinearGrad:()=>Uh,ResizeNearestNeighbor:()=>Au,ResizeNearestNeighborGrad:()=>Vh,Reverse:()=>Es,RotateWithOffset:()=>Po,Round:()=>Cs,Rsqrt:()=>Rs,SGDOptimizer:()=>Bu,ScatterNd:()=>Io,Select:()=>No,Selu:()=>So,Sequential:()=>Yo,Sigmoid:()=>Ms,Sign:()=>Co,Sin:()=>Fs,Sinh:()=>Eo,Slice:()=>To,Softmax:()=>Os,Softplus:()=>Ro,SpaceToBatchND:()=>yu,SparseToDense:()=>Hh,SplitV:()=>Fo,Sqrt:()=>$s,Square:()=>gu,SquaredDifference:()=>zs,Step:()=>ya,StridedSlice:()=>Mo,Sub:()=>Ps,Sum:()=>Ds,SymbolicTensor:()=>fr,Tan:()=>$o,Tanh:()=>Ls,Tensor:()=>et,TensorBuffer:()=>Mt,Tile:()=>Aa,TopK:()=>Do,Transpose:()=>Ws,Unique:()=>jh,Unpack:()=>Oo,UnsortedSegmentSum:()=>xu,Variable:()=>_u,ZerosLike:()=>zo,_FusedMatMul:()=>Bs,abs:()=>$t,acos:()=>$f,acosh:()=>Df,add:()=>oe,addN:()=>Yh,all:()=>Qh,any:()=>ku,argMax:()=>Iu,argMin:()=>Of,asin:()=>zf,asinh:()=>Pf,atan:()=>Lf,atan2:()=>Wf,atanh:()=>Bf,avgPool:()=>Nu,avgPool3d:()=>Vf,backend:()=>q2,backend_util:()=>C,basicLSTMCell:()=>u8,batchNorm:()=>Hs,batchNorm2d:()=>X2,batchNorm3d:()=>K2,batchNorm4d:()=>Z2,batchToSpaceND:()=>Su,bincount:()=>J2,booleanMaskAsync:()=>R8,broadcastTo:()=>Tu,browser:()=>bu,buffer:()=>We,callbacks:()=>H8,cast:()=>ye,ceil:()=>Uf,clipByValue:()=>pn,clone:()=>Nr,complex:()=>ga,concat:()=>ct,concat1d:()=>Y2,concat2d:()=>ed,concat3d:()=>Q2,concat4d:()=>e0,constraints:()=>T0,conv1d:()=>td,conv2d:()=>Kr,conv2dTranspose:()=>nd,conv3d:()=>Hf,conv3dTranspose:()=>c8,copyRegisteredKernels:()=>Z4,cos:()=>Eu,cosh:()=>rd,cosineWindow:()=>pm,cumsum:()=>ad,customGrad:()=>Tr,data:()=>V0,denseBincount:()=>t0,deprecationWarn:()=>Mf,depthToSpace:()=>jf,depthwiseConv2d:()=>Uo,deregisterOp:()=>G8,device_util:()=>Kh,diag:()=>h8,dilation2d:()=>Gf,disableDeprecationWarnings:()=>e8,dispose:()=>Fe,disposeVariables:()=>t8,div:()=>Ne,divNoNan:()=>qf,dot:()=>n0,dropout:()=>g0,elu:()=>Ho,enableDebugMode:()=>Q4,enableProdMode:()=>Y4,enclosingPowerOfTwo:()=>x0,engine:()=>Sr,env:()=>Q,equal:()=>xa,erf:()=>Xf,exp:()=>Pn,expandDims:()=>vn,expm1:()=>Kf,eye:()=>Zf,fft:()=>Lu,fill:()=>Cu,findBackend:()=>G2,findBackendFactory:()=>o8,floor:()=>jo,floorDiv:()=>Jh,forceHalfFloat:()=>I0,fused:()=>va,gather:()=>js,gatherND:()=>y0,gather_util:()=>Rf,getBackend:()=>s8,getGradient:()=>Tf,getKernel:()=>qh,getKernelsForBackend:()=>wu,gpgpu_util:()=>v0,grad:()=>d8,grads:()=>p8,greater:()=>Qn,greaterEqual:()=>_a,ifft:()=>Zo,imag:()=>sd,image:()=>St,inTopKAsync:()=>M8,initializers:()=>E0,input:()=>D0,io:()=>dn,irfft:()=>wd,isFinite:()=>r0,isInf:()=>a0,isNaN:()=>s0,keep:()=>Bt,kernel_impls:()=>Fr,layers:()=>C0,leakyRelu:()=>Ru,less:()=>id,lessEqual:()=>Gs,linalg:()=>w0,linspace:()=>i0,loadGraphModel:()=>Zn,loadLayersModel:()=>V8,localResponseNormalization:()=>Jf,log:()=>kn,log1p:()=>od,logSigmoid:()=>l0,logSoftmax:()=>ld,logSumExp:()=>Yf,logicalAnd:()=>er,logicalNot:()=>Fu,logicalOr:()=>ud,logicalXor:()=>u0,losses:()=>O8,matMul:()=>qe,math:()=>H2,max:()=>Ln,maxPool:()=>Mu,maxPool3d:()=>Qf,maxPoolWithArgmax:()=>c0,maximum:()=>Er,mean:()=>bt,memory:()=>Zh,metrics:()=>O0,min:()=>qo,minimum:()=>Xo,mirrorPad:()=>em,mod:()=>tm,model:()=>W8,models:()=>z0,moments:()=>cd,movingAverage:()=>F8,mul:()=>L,multiRNNCell:()=>A8,multinomial:()=>h0,neg:()=>_t,nextFrame:()=>Rd,norm:()=>kd,notEqual:()=>qs,oneHot:()=>Wo,ones:()=>Cr,onesLike:()=>In,op:()=>O,outerProduct:()=>y8,pad:()=>Zr,pad1d:()=>g8,pad2d:()=>x8,pad3d:()=>w8,pad4d:()=>_8,pool:()=>d0,pow:()=>Jr,prelu:()=>Du,print:()=>U2,prod:()=>hd,profile:()=>Bo,rand:()=>b8,randomGamma:()=>v8,randomNormal:()=>p0,randomUniform:()=>Ko,range:()=>dd,ready:()=>a8,real:()=>Ou,reciprocal:()=>nm,registerBackend:()=>vu,registerCallbackConstructor:()=>U8,registerGradient:()=>B2,registerKernel:()=>Lo,registerOp:()=>j8,regularizers:()=>P0,relu:()=>Rr,relu6:()=>pd,removeBackend:()=>i8,reshape:()=>q,reverse:()=>Nn,reverse1d:()=>k8,reverse2d:()=>I8,reverse3d:()=>N8,reverse4d:()=>S8,rfft:()=>Wu,round:()=>rm,rsqrt:()=>fd,scalar:()=>Se,scatterND:()=>A0,scatter_util:()=>Ff,selu:()=>md,separableConv2d:()=>am,sequential:()=>B8,serialization:()=>re,setBackend:()=>r8,setPlatform:()=>l8,setWasmPath:()=>P8,setWasmPaths:()=>L8,setWebGLContext:()=>mm,setdiff1dAsync:()=>f0,shared:()=>fm,sigmoid:()=>Yn,sign:()=>sm,signal:()=>D8,sin:()=>Ad,sinh:()=>yd,slice:()=>Me,slice1d:()=>gd,slice2d:()=>im,slice3d:()=>xd,slice4d:()=>zu,slice_util:()=>rn,softmax:()=>Pu,softplus:()=>Go,spaceToBatchND:()=>$u,sparseToDense:()=>dm,spectral:()=>$8,split:()=>an,sqrt:()=>Xt,square:()=>ot,squaredDifference:()=>_d,squeeze:()=>ba,stack:()=>Sn,step:()=>Jo,stridedSlice:()=>om,sub:()=>we,sum:()=>Te,sumOutType:()=>Xh,tan:()=>lm,tanh:()=>Vo,tensor:()=>dr,tensor1d:()=>Qt,tensor2d:()=>pr,tensor3d:()=>Cf,tensor4d:()=>T8,tensor5d:()=>E8,tensor6d:()=>C8,tensor_util:()=>hr,test_util:()=>j2,tidy:()=>U,tile:()=>wa,time:()=>n8,topk:()=>um,train:()=>Xs,transpose:()=>at,truncatedNormal:()=>bd,unique:()=>vd,unregisterGradient:()=>K4,unregisterKernel:()=>X4,unsortedSegmentSum:()=>cm,unstack:()=>tr,upcastType:()=>Jn,util:()=>k,valueAndGrad:()=>f8,valueAndGrads:()=>m8,variable:()=>m0,variableGrads:()=>o0,version:()=>X8,version_converter:()=>q8,version_core:()=>J4,version_cpu:()=>_0,version_layers:()=>ym,version_wasm:()=>S0,version_webgl:()=>k0,webgl:()=>z8,webgl_util:()=>b0,where:()=>fn,whereAsync:()=>hm,zeros:()=>Ct,zerosLike:()=>He});var K8=Object.create,Md=Object.defineProperty,Z8=Object.getPrototypeOf,J8=Object.prototype.hasOwnProperty,Y8=Object.getOwnPropertyNames,Q8=Object.getOwnPropertyDescriptor,ek=e=>Md(e,"__esModule",{value:!0}),nt=(e,t)=>()=>(t||(t={exports:{}},e(t.exports,t)),t.exports),ze=(e,t)=>{for(var n in t)Md(e,n,{get:t[n],enumerable:!0})},tk=(e,t,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Y8(t))!J8.call(e,r)&&r!=="default"&&Md(e,r,{get:()=>t[r],enumerable:!(n=Q8(t,r))||n.enumerable});return e},Qo=e=>e&&e.__esModule?e:tk(ek(Md(e!=null?K8(Z8(e)):{},"default",{value:e,enumerable:!0})),e),nk=nt(()=>{}),rk=nt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=h.toString();for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ak=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),sk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ik=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),ok=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],b=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,b=Math.max(b,d.length)),m=0,A=-32;A<b;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),lk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),gm=nt(()=>{}),uk=nt((e,t)=>{(function(n,r){var a=this,s=256,i=6,o=52,l="random",c=r.pow(s,i),u=r.pow(2,o),h=u*2,d=s-1,p;function f(w,_,N){var T=[];_=_==!0?{entropy:!0}:_||{};var E=g(y(_.entropy?[w,x(n)]:w==null?b():w,3),T),M=new m(T),z=function(){for(var P=M.g(i),B=c,G=0;P<u;)P=(P+G)*s,B*=s,G=M.g(1);for(;P>=h;)P/=2,B/=2,G>>>=1;return(P+G)/B};return z.int32=function(){return M.g(4)|0},z.quick=function(){return M.g(4)/4294967296},z.double=z,g(x(M.S),n),(_.pass||N||function(P,B,G,V){return V&&(V.S&&A(V,M),P.state=function(){return A(M,{})}),G?(r[l]=P,B):P})(z,E,"global"in _?_.global:this==r,_.state)}r["seed"+l]=f;function m(w){var _,N=w.length,T=this,E=0,M=T.i=T.j=0,z=T.S=[];for(N||(w=[N++]);E<s;)z[E]=E++;for(E=0;E<s;E++)z[E]=z[M=d&M+w[E%N]+(_=z[E])],z[M]=_;(T.g=function(P){for(var B,G=0,V=T.i,K=T.j,X=T.S;P--;)B=X[V=d&V+1],G=G*s+X[d&(X[V]=X[K=d&K+B])+(X[K]=B)];return T.i=V,T.j=K,G})(s)}function A(w,_){return _.i=w.i,_.j=w.j,_.S=w.S.slice(),_}function y(w,_){var N=[],T=typeof w,E;if(_&&T=="object")for(E in w)try{N.push(y(w[E],_-1))}catch(M){}return N.length?N:T=="string"?w:w+"\0"}function g(w,_){for(var N=w+"",T,E=0;E<N.length;)_[d&E]=d&(T^=_[d&E]*19)+N.charCodeAt(E++);return x(_)}function b(){try{var w;return p&&(w=p.randomBytes)?w=w(s):(w=new Uint8Array(s),(a.crypto||a.msCrypto).getRandomValues(w)),x(w)}catch(T){var _=a.navigator,N=_&&_.plugins;return[+new Date,a,N,a.screen,x(n)]}}function x(w){return String.fromCharCode.apply(0,w)}if(g(r.random(),n),typeof t=="object"&&t.exports){t.exports=f;try{p=gm()}catch(w){}}else typeof define=="function"&&define.amd&&define(function(){return f})})([],Math)}),ck=nt((e,t)=>{var n=rk(),r=ak(),a=sk(),s=ik(),i=ok(),o=lk(),l=uk();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),hk=nt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=h.toString();for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),dk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),pk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),fk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),mk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],b=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,b=Math.max(b,d.length)),m=0,A=-32;A<b;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Ak=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),yk=nt((e,t)=>{(function(n,r){var a=this,s=256,i=6,o=52,l="random",c=r.pow(s,i),u=r.pow(2,o),h=u*2,d=s-1,p;function f(w,_,N){var T=[];_=_==!0?{entropy:!0}:_||{};var E=g(y(_.entropy?[w,x(n)]:w==null?b():w,3),T),M=new m(T),z=function(){for(var P=M.g(i),B=c,G=0;P<u;)P=(P+G)*s,B*=s,G=M.g(1);for(;P>=h;)P/=2,B/=2,G>>>=1;return(P+G)/B};return z.int32=function(){return M.g(4)|0},z.quick=function(){return M.g(4)/4294967296},z.double=z,g(x(M.S),n),(_.pass||N||function(P,B,G,V){return V&&(V.S&&A(V,M),P.state=function(){return A(M,{})}),G?(r[l]=P,B):P})(z,E,"global"in _?_.global:this==r,_.state)}r["seed"+l]=f;function m(w){var _,N=w.length,T=this,E=0,M=T.i=T.j=0,z=T.S=[];for(N||(w=[N++]);E<s;)z[E]=E++;for(E=0;E<s;E++)z[E]=z[M=d&M+w[E%N]+(_=z[E])],z[M]=_;(T.g=function(P){for(var B,G=0,V=T.i,K=T.j,X=T.S;P--;)B=X[V=d&V+1],G=G*s+X[d&(X[V]=X[K=d&K+B])+(X[K]=B)];return T.i=V,T.j=K,G})(s)}function A(w,_){return _.i=w.i,_.j=w.j,_.S=w.S.slice(),_}function y(w,_){var N=[],T=typeof w,E;if(_&&T=="object")for(E in w)try{N.push(y(w[E],_-1))}catch(M){}return N.length?N:T=="string"?w:w+"\0"}function g(w,_){for(var N=w+"",T,E=0;E<N.length;)_[d&E]=d&(T^=_[d&E]*19)+N.charCodeAt(E++);return x(_)}function b(){try{var w;return p&&(w=p.randomBytes)?w=w(s):(w=new Uint8Array(s),(a.crypto||a.msCrypto).getRandomValues(w)),x(w)}catch(T){var _=a.navigator,N=_&&_.plugins;return[+new Date,a,N,a.screen,x(n)]}}function x(w){return String.fromCharCode.apply(0,w)}if(g(r.random(),n),typeof t=="object"&&t.exports){t.exports=f;try{p=gm()}catch(w){}}else typeof define=="function"&&define.amd&&define(function(){return f})})([],Math)}),gk=nt((e,t)=>{var n=hk(),r=dk(),a=pk(),s=fk(),i=mk(),o=Ak(),l=yk();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),Uu=nt(()=>{}),xk=nt(()=>{}),wk=nt(()=>{}),_k=nt((e,t)=>{var n=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(a){a=a||{};function s(){return Y.buffer!=Ye&&bn(Y.buffer),wn}function i(){return Y.buffer!=Ye&&bn(Y.buffer),qt}function o(){return Y.buffer!=Ye&&bn(Y.buffer),hn}function l(){return Y.buffer!=Ye&&bn(Y.buffer),nn}function c(){return Y.buffer!=Ye&&bn(Y.buffer),vr}var u=typeof a!="undefined"?a:{},h={},d;for(d in u)u.hasOwnProperty(d)&&(h[d]=u[d]);var p=[],f="./this.program",m=function(v,S){throw S},A=!1,y=!1,g=!1,b=!1;A=typeof window=="object",y=typeof importScripts=="function",g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",b=!A&&!g&&!y;var x=u.ENVIRONMENT_IS_PTHREAD||!1;x&&(Ye=u.buffer,qn=u.DYNAMIC_BASE,cr=u.DYNAMICTOP_PTR);var w="";function _(v){return u.locateFile?u.locateFile(v,w):w+v}var N,T,E,M,z,P;if(g){y?w=Uu().dirname(w)+"/":w=__dirname+"/",N=function(v,S){return z||(z=require("fs")),P||(P=Uu()),v=P.normalize(v),z.readFileSync(v,S?null:"utf8")},E=function(v){var S=N(v,!0);return S.buffer||(S=new Uint8Array(S)),ke(S.buffer),S},process.argv.length>1&&(f=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(v){if(!(v instanceof $2))throw v}),process.on("unhandledRejection",Gr),m=function(v){process.exit(v)},u.inspect=function(){return"[Emscripten Module object]"};var B;try{B=xk()}catch(v){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),v}Worker=B.Worker}else b?(typeof read!="undefined"&&(N=function(v){return read(v)}),E=function(v){var S;return typeof readbuffer=="function"?new Uint8Array(readbuffer(v)):(S=read(v,"binary"),ke(typeof S=="object"),S)},typeof scriptArgs!="undefined"?p=scriptArgs:typeof arguments!="undefined"&&(p=arguments),typeof quit=="function"&&(m=function(v){quit(v)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(A||y)&&(y?w=self.location.href:document.currentScript&&(w=document.currentScript.src),typeof r!="undefined"&&r&&(w=r),w.indexOf("blob:")!==0?w=w.substr(0,w.lastIndexOf("/")+1):w="",g?(N=function(v,S){return z||(z=require("fs")),P||(P=Uu()),v=P.normalize(v),z.readFileSync(v,S?null:"utf8")},E=function(v){var S=N(v,!0);return S.buffer||(S=new Uint8Array(S)),ke(S.buffer),S}):(N=function(v){var S=new XMLHttpRequest;return S.open("GET",v,!1),S.send(null),S.responseText},y&&(E=function(v){var S=new XMLHttpRequest;return S.open("GET",v,!1),S.responseType="arraybuffer",S.send(null),new Uint8Array(S.response)}),T=function(v,S,$){var j=new XMLHttpRequest;j.open("GET",v,!0),j.responseType="arraybuffer",j.onload=function(){if(j.status==200||j.status==0&&j.response){S(j.response);return}$()},j.onerror=$,j.send(null)}),M=function(v){document.title=v});g&&typeof performance=="undefined"&&(performance=wk().performance);var G=u.print||console.log.bind(console),V=u.printErr||console.warn.bind(console);for(d in h)h.hasOwnProperty(d)&&(u[d]=h[d]);h=null,u.arguments&&(p=u.arguments),u.thisProgram&&(f=u.thisProgram),u.quit&&(m=u.quit);var K=Atomics.load,X=Atomics.store,ee=Atomics.compareExchange,J;u.wasmBinary&&(J=u.wasmBinary);var ae;u.noExitRuntime&&(ae=u.noExitRuntime),typeof WebAssembly!="object"&&V("no native wasm support detected");var Y,ue=new WebAssembly.Table({initial:171,maximum:171+0,element:"anyfunc"}),ne,de=0,he=0,me=!1,Ae=0;function ke(v,S){v||Gr("Assertion failed: "+S)}function Ee(v){var S=u["_"+v];return ke(S,"Cannot call unknown function "+v+", make sure it is exported"),S}function Ce(v,S,$,j,pe){var ce={string:function(zn){var ha=0;if(zn!=null&&zn!==0){var tu=(zn.length<<2)+1;ha=Di(tu),it(zn,ha,tu)}return ha},array:function(zn){var ha=Di(zn.length);return lt(zn,ha),ha}};function le(zn){return S==="string"?Ve(zn):S==="boolean"?Boolean(zn):zn}var be=Ee(v),Qe=[],Ft=0;if(j)for(var Yt=0;Yt<j.length;Yt++){var zi=ce[$[Yt]];zi?(Ft===0&&(Ft=Yl()),Qe[Yt]=zi(j[Yt])):Qe[Yt]=j[Yt]}var eu=be.apply(null,Qe);return eu=le(eu),Ft!==0&&Oi(Ft),eu}function Oe(v,S,$,j){$=$||[];var pe=$.every(function(le){return le==="number"}),ce=S!=="string";return ce&&pe&&!j?Ee(v):function(){return Ce(v,S,$,arguments,j)}}function Ke(v,S,$){for(var j=S+$,pe="";!(S>=j);){var ce=v[S++];if(!ce)return pe;if(!(ce&128)){pe+=String.fromCharCode(ce);continue}var le=v[S++]&63;if((ce&224)==192){pe+=String.fromCharCode((ce&31)<<6|le);continue}var be=v[S++]&63;if((ce&240)==224?ce=(ce&15)<<12|le<<6|be:ce=(ce&7)<<18|le<<12|be<<6|v[S++]&63,ce<65536)pe+=String.fromCharCode(ce);else{var Qe=ce-65536;pe+=String.fromCharCode(55296|Qe>>10,56320|Qe&1023)}}return pe}function Ve(v,S){return v?Ke(i(),v,S):""}function rt(v,S,$,j){if(!(j>0))return 0;for(var pe=$,ce=$+j-1,le=0;le<v.length;++le){var be=v.charCodeAt(le);if(be>=55296&&be<=57343){var Qe=v.charCodeAt(++le);be=65536+((be&1023)<<10)|Qe&1023}if(be<=127){if($>=ce)break;S[$++]=be}else if(be<=2047){if($+1>=ce)break;S[$++]=192|be>>6,S[$++]=128|be&63}else if(be<=65535){if($+2>=ce)break;S[$++]=224|be>>12,S[$++]=128|be>>6&63,S[$++]=128|be&63}else{if($+3>=ce)break;S[$++]=240|be>>18,S[$++]=128|be>>12&63,S[$++]=128|be>>6&63,S[$++]=128|be&63}}return S[$]=0,$-pe}function it(v,S,$){return rt(v,i(),S,$)}function je(v){for(var S=0,$=0;$<v.length;++$){var j=v.charCodeAt($);j>=55296&&j<=57343&&(j=65536+((j&1023)<<10)|v.charCodeAt(++$)&1023),j<=127?++S:j<=2047?S+=2:j<=65535?S+=3:S+=4}return S}function lt(v,S){s().set(v,S)}var ut=65536;function Dn(v,S){return v%S>0&&(v+=S-v%S),v}var Ye,wn,qt,_n,jn,hn,nn,Gn,vr;function bn(v){Ye=v,u.HEAP8=wn=new Int8Array(v),u.HEAP16=_n=new Int16Array(v),u.HEAP32=hn=new Int32Array(v),u.HEAPU8=qt=new Uint8Array(v),u.HEAPU16=jn=new Uint16Array(v),u.HEAPU32=nn=new Uint32Array(v),u.HEAPF32=Gn=new Float32Array(v),u.HEAPF64=vr=new Float64Array(v)}var Ni=5256464,Pl=Ni,ur=13584,qn=5256464,cr=12656,Si=u.INITIAL_MEMORY||16777216;if(x)Y=u.wasmMemory,Ye=u.buffer;else if(u.wasmMemory)Y=u.wasmMemory;else if(Y=new WebAssembly.Memory({initial:Si/ut,maximum:2147483648/ut,shared:!0}),!(Y.buffer instanceof SharedArrayBuffer))throw V("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),g&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Y&&(Ye=Y.buffer),Si=Ye.byteLength,bn(Ye),x||(o()[cr>>2]=qn);function Ti(v){for(;v.length>0;){var S=v.shift();if(typeof S=="function"){S(u);continue}var $=S.func;typeof $=="number"?S.arg===void 0?u.dynCall_v($):u.dynCall_vi($,S.arg):$(S.arg===void 0?null:S.arg)}}var Va=[],Ll=[],A1=[],Wl=[],Hc=[],Bl=!1;x&&(Bl=!0);function Xn(){if(!x){if(u.preRun)for(typeof u.preRun=="function"&&(u.preRun=[u.preRun]);u.preRun.length;)x1(u.preRun.shift());Ti(Va)}}function jc(){Bl=!0,Ti(Ll)}function y1(){x||Ti(A1)}function g1(){if(!x){if(u.postRun)for(typeof u.postRun=="function"&&(u.postRun=[u.postRun]);u.postRun.length;)Ua(u.postRun.shift());Ti(Hc)}}function x1(v){Va.unshift(v)}function Ua(v){Hc.unshift(v)}var Ei=Math.ceil,w1=Math.floor,jr=0,Vl=null,Ha=null;function _1(v){ke(!x,"addRunDependency cannot be used in a pthread worker"),jr++,u.monitorRunDependencies&&u.monitorRunDependencies(jr)}function b1(v){if(jr--,u.monitorRunDependencies&&u.monitorRunDependencies(jr),jr==0&&(Vl!==null&&(clearInterval(Vl),Vl=null),Ha)){var S=Ha;Ha=null,S()}}u.preloadedImages={},u.preloadedAudios={};function Gr(v){throw u.onAbort&&u.onAbort(v),x&&console.error("Pthread aborting at "+new Error().stack),v+="",G(v),V(v),me=!0,Ae=1,v="abort("+v+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(v)}function Ul(v,S){return String.prototype.startsWith?v.startsWith(S):v.indexOf(S)===0}var v1="data:application/octet-stream;base64,";function Gc(v){return Ul(v,v1)}var k1="file://";function qc(v){return Ul(v,k1)}var Kn="tfjs-backend-wasm-threaded-simd.wasm";Gc(Kn)||(Kn=_(Kn));function Xc(){try{if(J)return new Uint8Array(J);if(E)return E(Kn);throw"both async and sync fetching of the wasm failed"}catch(v){Gr(v)}}function I1(){return!J&&(A||y)&&typeof fetch=="function"&&!qc(Kn)?fetch(Kn,{credentials:"same-origin"}).then(function(v){if(!v.ok)throw"failed to load wasm binary file at '"+Kn+"'";return v.arrayBuffer()}).catch(function(){return Xc()}):new Promise(function(v,S){v(Xc())})}function N1(){var v={a:gf};function S(le,be){var Qe=le.exports;if(u.asm=Qe,ne=be,!x){var Ft=fe.unusedWorkers.length;fe.unusedWorkers.forEach(function(Yt){fe.loadWasmModuleToWorker(Yt,function(){--Ft||b1("wasm-instantiate")})})}}x||_1("wasm-instantiate");function $(le){S(le.instance,le.module)}function j(le){return I1().then(function(be){return WebAssembly.instantiate(be,v)}).then(le,function(be){V("failed to asynchronously prepare wasm: "+be),Gr(be)})}function pe(){if(!J&&typeof WebAssembly.instantiateStreaming=="function"&&!Gc(Kn)&&!qc(Kn)&&typeof fetch=="function")fetch(Kn,{credentials:"same-origin"}).then(function(le){var be=WebAssembly.instantiateStreaming(le,v);return be.then($,function(Qe){V("wasm streaming compile failed: "+Qe),V("falling back to ArrayBuffer instantiation"),j($)})});else return j($)}if(u.instantiateWasm)try{var ce=u.instantiateWasm(v,S);return ce}catch(le){return V("Module.instantiateWasm callback failed with error: "+le),!1}return pe(),{}}var S1={};function T1(){fe.initRuntime()}x||Ll.push({func:function(){ih()}});var Kc=0,Zc=0,Jc=0;function Ci(v,S,$){v=v|0,S=S|0,$=$|0,Kc=v,Jc=S,Zc=$}u.__register_pthread_ptr=Ci;var Hl={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},Ri=13568;function Fi(v,S){if(v<=0||v>s().length||v&!0||S<0)return-28;if(S==0)return 0;S>=2147483647&&(S=Infinity);var $=Atomics.load(o(),Ri>>2),j=0;if($==v){var pe=Atomics.compareExchange(o(),Ri>>2,$,0);if(pe==$&&(--S,j=1,S<=0))return 1}var ce=Atomics.notify(o(),v>>2,S);if(ce>=0)return ce+j;throw"Atomics.notify returned an unexpected value "+ce}u._emscripten_futex_wake=Fi;function E1(v){if(x)throw"Internal Error! _kill_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _kill_thread!";o()[v+12>>2]=0;var S=fe.pthreads[v];S.worker.terminate(),fe.freeThreadData(S),fe.runningWorkers.splice(fe.runningWorkers.indexOf(S.worker),1),S.worker.pthread=void 0}function C1(v){if(x)throw"Internal Error! _cancel_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _cancel_thread!";var S=fe.pthreads[v];S.worker.postMessage({cmd:"cancel"})}function R1(v){if(x)throw"Internal Error! _cleanup_thread() can only ever be called from main application thread!";if(!v)throw"Internal Error! Null pthread_ptr in _cleanup_thread!";o()[v+12>>2]=0;var S=fe.pthreads[v];if(S){var $=S.worker;fe.returnWorkerToPool($)}}var fe={MAIN_THREAD_ID:1,mainThreadInfo:{schedPolicy:0,schedPrio:0},unusedWorkers:[],runningWorkers:[],initRuntime:function(){Ci(fe.mainThreadBlock,!y,1),C2(fe.mainThreadBlock)},initMainThreadBlock:function(){for(var v=8,S=0;S<v;++S)fe.allocateUnusedWorker();fe.mainThreadBlock=12816;for(var S=0;S<232/4;++S)l()[fe.mainThreadBlock/4+S]=0;o()[fe.mainThreadBlock+12>>2]=fe.mainThreadBlock;var $=fe.mainThreadBlock+156;o()[$>>2]=$;for(var j=13056,S=0;S<128;++S)l()[j/4+S]=0;Atomics.store(l(),fe.mainThreadBlock+104>>2,j),Atomics.store(l(),fe.mainThreadBlock+40>>2,fe.mainThreadBlock),Atomics.store(l(),fe.mainThreadBlock+44>>2,42)},initWorker:function(){},pthreads:{},exitHandlers:null,setThreadStatus:function(){},runExitHandlers:function(){if(fe.exitHandlers!==null){for(;fe.exitHandlers.length>0;)fe.exitHandlers.pop()();fe.exitHandlers=null}x&&de&&E2()},threadExit:function(v){var S=kr();S&&(Atomics.store(l(),S+4>>2,v),Atomics.store(l(),S+0>>2,1),Atomics.store(l(),S+60>>2,1),Atomics.store(l(),S+64>>2,0),fe.runExitHandlers(),Fi(S+0,2147483647),Ci(0,0,0),de=0,x&&postMessage({cmd:"exit"}))},threadCancel:function(){fe.runExitHandlers(),Atomics.store(l(),de+4>>2,-1),Atomics.store(l(),de+0>>2,1),Fi(de+0,2147483647),de=he=0,Ci(0,0,0),postMessage({cmd:"cancelDone"})},terminateAllThreads:function(){for(var v in fe.pthreads){var S=fe.pthreads[v];S&&S.worker&&fe.returnWorkerToPool(S.worker)}fe.pthreads={};for(var $=0;$<fe.unusedWorkers.length;++$){var j=fe.unusedWorkers[$];j.terminate()}fe.unusedWorkers=[];for(var $=0;$<fe.runningWorkers.length;++$){var j=fe.runningWorkers[$],S=j.pthread;fe.freeThreadData(S),j.terminate()}fe.runningWorkers=[]},freeThreadData:function(v){if(v){if(v.threadInfoStruct){var S=o()[v.threadInfoStruct+104>>2];o()[v.threadInfoStruct+104>>2]=0,Jl(S),Jl(v.threadInfoStruct)}v.threadInfoStruct=0,v.allocatedOwnStack&&v.stackBase&&Jl(v.stackBase),v.stackBase=0,v.worker&&(v.worker.pthread=null)}},returnWorkerToPool:function(v){delete fe.pthreads[v.pthread.thread],fe.unusedWorkers.push(v),fe.runningWorkers.splice(fe.runningWorkers.indexOf(v),1),fe.freeThreadData(v.pthread),v.pthread=void 0},receiveObjectTransfer:function(v){},loadWasmModuleToWorker:function(v,S){v.onmessage=function($){var j=$.data,pe=j.cmd;if(v.pthread&&(fe.currentProxiedOperationCallerThread=v.pthread.threadInfoStruct),j.targetThread&&j.targetThread!=kr()){var ce=fe.pthreads[j.targetThread];ce?ce.worker.postMessage($.data,j.transferList):console.error('Internal error! Worker sent a message "'+pe+'" to target pthread '+j.targetThread+", but that thread no longer exists!"),fe.currentProxiedOperationCallerThread=void 0;return}if(pe==="processQueuedMainThreadWork")_f();else if(pe==="spawnThread")rh($.data);else if(pe==="cleanupThread")R1(j.thread);else if(pe==="killThread")E1(j.thread);else if(pe==="cancelThread")C1(j.thread);else if(pe==="loaded")v.loaded=!0,S&&S(v),v.runPthread&&(v.runPthread(),delete v.runPthread);else if(pe==="print")G("Thread "+j.threadId+": "+j.text);else if(pe==="printErr")V("Thread "+j.threadId+": "+j.text);else if(pe==="alert")alert("Thread "+j.threadId+": "+j.text);else if(pe==="exit"){var le=v.pthread&&Atomics.load(l(),v.pthread.thread+68>>2);le&&fe.returnWorkerToPool(v)}else pe==="cancelDone"?fe.returnWorkerToPool(v):pe==="objectTransfer"?fe.receiveObjectTransfer($.data):$.data.target==="setimmediate"?v.postMessage($.data):V("worker sent an unknown command "+pe);fe.currentProxiedOperationCallerThread=void 0},v.onerror=function($){V("pthread sent an error! "+$.filename+":"+$.lineno+": "+$.message)},g&&(v.on("message",function($){v.onmessage({data:$})}),v.on("error",function($){v.onerror($)}),v.on("exit",function($){console.log("worker exited - TODO: update the worker queue?")})),v.postMessage({cmd:"load",urlOrBlob:u.mainScriptUrlOrBlob||r,wasmMemory:Y,wasmModule:ne,DYNAMIC_BASE:qn,DYNAMICTOP_PTR:cr})},allocateUnusedWorker:function(){var v=_("tfjs-backend-wasm-threaded-simd.worker.js");fe.unusedWorkers.push(new Worker(v))},getNewWorker:function(){return fe.unusedWorkers.length==0&&(fe.allocateUnusedWorker(),fe.loadWasmModuleToWorker(fe.unusedWorkers[0])),fe.unusedWorkers.length>0?fe.unusedWorkers.pop():null},busySpinWait:function(v){for(var S=performance.now()+v;performance.now()<S;);}};function F1(v,S){Ni=Pl=v,ur=S,Oi(v)}u.establishStackSpace=F1;function M1(){return ae}u.getNoExitRuntime=M1;function $1(v,S,$,j){Gr("Assertion failed: "+Ve(v)+", at: "+[S?Ve(S):"unknown filename",$,j?Ve(j):"unknown function"])}function D1(v,S){var $=_main(v,S)}var ja;g?ja=function(){var v=process.hrtime();return v[0]*1e3+v[1]/1e6}:x?ja=function(){return performance.now()-u.__performance_now_clock_drift}:typeof dateNow!="undefined"?ja=dateNow:ja=function(){return performance.now()};function O1(v){return o()[N2()>>2]=v,v}function z1(v,S){if(x)return la(1,1,v,S);Wl.unshift({func:v,arg:S})}function P1(v,S){if(v==S)postMessage({cmd:"processQueuedMainThreadWork"});else if(x)postMessage({targetThread:v,cmd:"processThreadQueue"});else{var $=fe.pthreads[v],j=$&&$.worker;if(!j)return;j.postMessage({cmd:"processThreadQueue"})}return 1}function L1(){Gr()}function W1(v,S){v=v|0,S=S|0}function B1(v,S,$){if(v<=0||v>s().length||v&!0)return-28;if(y){var j=Atomics.wait(o(),v>>2,S,$);if(j==="timed-out")return-73;if(j==="not-equal")return-6;if(j==="ok")return 0;throw"Atomics.wait returned an unexpected value "+j}else{var pe=Atomics.load(o(),v>>2);if(S!=pe)return-6;var ce=performance.now(),le=ce+$;Atomics.store(o(),Ri>>2,v);for(var be=v;v==be;){if(ce=performance.now(),ce>le)return-73;_f(),v=Atomics.load(o(),Ri>>2)}return 0}}function V1(){return Jc|0}function U1(){return Zc|0}function H1(v,S,$){i().copyWithin(v,S,S+$)}function j1(){return navigator.hardwareConcurrency}function la(v,S){for(var $=arguments.length-2,j=Yl(),pe=Di($*8),ce=pe>>3,le=0;le<$;le++)c()[ce+le]=arguments[2+le];var be=F2(v,$,pe,S);return Oi(j),be}var Ga=[];function Mi(v,S){Mi.array||(Mi.array=[]);var $=Mi.array;$.length=0;for(var j;j=i()[v++];)j===100||j===102?(S=S+7&~7,$.push(c()[S>>3]),S+=8):(S=S+3&~3,$.push(o()[S>>2]),S+=4);return $}function G1(v,S,$){Ga.length=S;for(var j=$>>3,pe=0;pe<S;pe++)Ga[pe]=c()[j+pe];var ce=v<0,le=ce?S1[-v-1]:yf[v];if(ce){var be=Ga[1],Qe=Ga[2],Ft=Mi(be,Qe);return le.apply(null,Ft)}return le.apply(null,Ga)}function q1(){return i().length}function X1(v){try{return Y.grow(v-Ye.byteLength+65535>>>16),bn(Y.buffer),1}catch(S){}}function K1(v){v=v>>>0;var S=q1();if(v<=S)return!1;var $=65536,j=2147483648;if(v>j)return!1;for(var pe=16777216,ce=1;ce<=4;ce*=2){var le=S*(1+.2/ce);le=Math.min(le,v+100663296);var be=Math.min(j,Dn(Math.max(pe,v,le),$)),Qe=X1(be);if(Qe)return!0}return!1}var Le={keyEvent:0,mouseEvent:0,wheelEvent:0,uiEvent:0,focusEvent:0,deviceOrientationEvent:0,deviceMotionEvent:0,fullscreenChangeEvent:0,pointerlockChangeEvent:0,visibilityChangeEvent:0,touchEvent:0,previousFullscreenElement:null,previousScreenX:null,previousScreenY:null,removeEventListenersRegistered:!1,removeAllEventListeners:function(){for(var v=Le.eventHandlers.length-1;v>=0;--v)Le._removeHandler(v);Le.eventHandlers=[],Le.deferredCalls=[]},registerRemoveEventListeners:function(){Le.removeEventListenersRegistered||(Wl.push(Le.removeAllEventListeners),Le.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(v,S,$){function j(le,be){if(le.length!=be.length)return!1;for(var Qe in le)if(le[Qe]!=be[Qe])return!1;return!0}for(var pe in Le.deferredCalls){var ce=Le.deferredCalls[pe];if(ce.targetFunction==v&&j(ce.argsList,$))return}Le.deferredCalls.push({targetFunction:v,precedence:S,argsList:$}),Le.deferredCalls.sort(function(le,be){return le.precedence<be.precedence})},removeDeferredCalls:function(v){for(var S=0;S<Le.deferredCalls.length;++S)Le.deferredCalls[S].targetFunction==v&&(Le.deferredCalls.splice(S,1),--S)},canPerformEventHandlerRequests:function(){return Le.inEventHandler&&Le.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(Le.canPerformEventHandlerRequests())for(var v=0;v<Le.deferredCalls.length;++v){var S=Le.deferredCalls[v];Le.deferredCalls.splice(v,1),--v,S.targetFunction.apply(null,S.argsList)}},inEventHandler:0,currentEventHandler:null,eventHandlers:[],removeAllHandlersOnTarget:function(v,S){for(var $=0;$<Le.eventHandlers.length;++$)Le.eventHandlers[$].target==v&&(!S||S==Le.eventHandlers[$].eventTypeString)&&Le._removeHandler($--)},_removeHandler:function(v){var S=Le.eventHandlers[v];S.target.removeEventListener(S.eventTypeString,S.eventListenerFunc,S.useCapture),Le.eventHandlers.splice(v,1)},registerOrRemoveHandler:function(v){var S=function(j){++Le.inEventHandler,Le.currentEventHandler=v,Le.runDeferredCalls(),v.handlerFunc(j),Le.runDeferredCalls(),--Le.inEventHandler};if(v.callbackfunc)v.eventListenerFunc=S,v.target.addEventListener(v.eventTypeString,S,v.useCapture),Le.eventHandlers.push(v),Le.registerRemoveEventListeners();else for(var $=0;$<Le.eventHandlers.length;++$)Le.eventHandlers[$].target==v.target&&Le.eventHandlers[$].eventTypeString==v.eventTypeString&&Le._removeHandler($--)},queueEventHandlerOnThread_iiii:function(v,S,$,j,pe){var ce=Yl(),le=Di(12);o()[le>>2]=$,o()[le+4>>2]=j,o()[le+8>>2]=pe,bf(v,637534208,S,j,le),Oi(ce)},getTargetThreadForEventCallback:function(v){switch(v){case 1:return 0;case 2:return fe.currentProxiedOperationCallerThread;default:return v}},getNodeNameForTarget:function(v){return v?v==window?"#window":v==screen?"#screen":v&&v.nodeName?v.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function Z1(v){var S=je(v)+1,$=Zl(S);return it(v,$,S),$}function J1(v,S,$,j){var pe=Yl(),ce=Di(12),le=0;S&&(le=Z1(S)),o()[ce>>2]=le,o()[ce+4>>2]=$,o()[ce+8>>2]=j,bf(v,657457152,0,le,ce),Oi(pe)}function Y1(v,S,$,j){S=S?Ve(S):"",J1(v,S,$,j)}function Q1(v){return v>2?Ve(v):v}var ef=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function tf(v){v=Q1(v);var S=ef[v]||(typeof document!="undefined"?document.querySelector(v):void 0);return S}function jl(v){return tf(v)}function Yc(v,S,$){var j=jl(v);if(!j)return-4;if(j.canvasSharedPtr&&(o()[j.canvasSharedPtr>>2]=S,o()[j.canvasSharedPtr+4>>2]=$),j.offscreenCanvas||!j.controlTransferredOffscreen){j.offscreenCanvas&&(j=j.offscreenCanvas);var pe=!1;if(j.GLctxObject&&j.GLctxObject.GLctx){var ce=j.GLctxObject.GLctx.getParameter(2978);pe=ce[0]===0&&ce[1]===0&&ce[2]===j.width&&ce[3]===j.height}j.width=S,j.height=$,pe&&j.GLctxObject.GLctx.viewport(0,0,S,$)}else if(j.canvasSharedPtr){var le=o()[j.canvasSharedPtr+8>>2];return Y1(le,v,S,$),1}else return-4;return 0}function Qc(v,S,$){return x?la(2,1,v,S,$):Yc(v,S,$)}function nf(v,S,$){var j=jl(v);return j?Yc(v,S,$):Qc(v,S,$)}function rf(v){v=v|0}function af(v,S){v=v|0,S=S|0}function sf(v){var S=v.getExtension("ANGLE_instanced_arrays");if(S)return v.vertexAttribDivisor=function($,j){S.vertexAttribDivisorANGLE($,j)},v.drawArraysInstanced=function($,j,pe,ce){S.drawArraysInstancedANGLE($,j,pe,ce)},v.drawElementsInstanced=function($,j,pe,ce,le){S.drawElementsInstancedANGLE($,j,pe,ce,le)},1}function of(v){var S=v.getExtension("OES_vertex_array_object");if(S)return v.createVertexArray=function(){return S.createVertexArrayOES()},v.deleteVertexArray=function($){S.deleteVertexArrayOES($)},v.bindVertexArray=function($){S.bindVertexArrayOES($)},v.isVertexArray=function($){return S.isVertexArrayOES($)},1}function lf(v){var S=v.getExtension("WEBGL_draw_buffers");if(S)return v.drawBuffers=function($,j){S.drawBuffersWEBGL($,j)},1}var Be={counter:1,lastError:0,buffers:[],mappedBuffers:{},programs:[],framebuffers:[],renderbuffers:[],textures:[],uniforms:[],shaders:[],vaos:[],contexts:{},currentContext:null,offscreenCanvases:{},timerQueriesEXT:[],programInfos:{},stringCache:{},unpackAlignment:4,init:function(){for(var v=new Float32Array(Be.MINI_TEMP_BUFFER_SIZE),S=0;S<Be.MINI_TEMP_BUFFER_SIZE;S++)Be.miniTempBufferFloatViews[S]=v.subarray(0,S+1);for(var $=new Int32Array(Be.MINI_TEMP_BUFFER_SIZE),S=0;S<Be.MINI_TEMP_BUFFER_SIZE;S++)Be.miniTempBufferIntViews[S]=$.subarray(0,S+1)},recordError:function(v){Be.lastError||(Be.lastError=v)},getNewId:function(v){for(var S=Be.counter++,$=v.length;$<S;$++)v[$]=null;return S},MINI_TEMP_BUFFER_SIZE:256,miniTempBufferFloatViews:[0],miniTempBufferIntViews:[0],getSource:function(v,S,$,j){for(var pe="",ce=0;ce<S;++ce){var le=j?o()[j+ce*4>>2]:-1;pe+=Ve(o()[$+ce*4>>2],le<0?void 0:le)}return pe},createContext:function(v,S){var $=v.getContext("webgl",S);if(!$)return 0;var j=Be.registerContext($,S);return j},registerContext:function(v,S){var $=Zl(8);o()[$+4>>2]=kr();var j={handle:$,attributes:S,version:S.majorVersion,GLctx:v};return v.canvas&&(v.canvas.GLctxObject=j),Be.contexts[$]=j,(typeof S.enableExtensionsByDefault=="undefined"||S.enableExtensionsByDefault)&&Be.initExtensions(j),$},makeContextCurrent:function(v){return Be.currentContext=Be.contexts[v],u.ctx=ua=Be.currentContext&&Be.currentContext.GLctx,!(v&&!ua)},getContext:function(v){return Be.contexts[v]},deleteContext:function(v){Be.currentContext===Be.contexts[v]&&(Be.currentContext=null),typeof Le=="object"&&Le.removeAllHandlersOnTarget(Be.contexts[v].GLctx.canvas),Be.contexts[v]&&Be.contexts[v].GLctx.canvas&&(Be.contexts[v].GLctx.canvas.GLctxObject=void 0),Jl(Be.contexts[v].handle),Be.contexts[v]=null},initExtensions:function(v){if(v||(v=Be.currentContext),!v.initExtensionsDone){v.initExtensionsDone=!0;var S=v.GLctx;sf(S),of(S),lf(S),S.disjointTimerQueryExt=S.getExtension("EXT_disjoint_timer_query");var $=["OES_texture_float","OES_texture_half_float","OES_standard_derivatives","OES_vertex_array_object","WEBGL_compressed_texture_s3tc","WEBGL_depth_texture","OES_element_index_uint","EXT_texture_filter_anisotropic","EXT_frag_depth","WEBGL_draw_buffers","ANGLE_instanced_arrays","OES_texture_float_linear","OES_texture_half_float_linear","EXT_blend_minmax","EXT_shader_texture_lod","EXT_texture_norm16","WEBGL_compressed_texture_pvrtc","EXT_color_buffer_half_float","WEBGL_color_buffer_float","EXT_sRGB","WEBGL_compressed_texture_etc1","EXT_disjoint_timer_query","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_astc","EXT_color_buffer_float","WEBGL_compressed_texture_s3tc_srgb","EXT_disjoint_timer_query_webgl2","WEBKIT_WEBGL_compressed_texture_pvrtc"],j=S.getSupportedExtensions()||[];j.forEach(function(pe){$.indexOf(pe)!=-1&&S.getExtension(pe)})}},populateUniformTable:function(v){for(var S=Be.programs[v],$=Be.programInfos[v]={uniforms:{},maxUniformLength:0,maxAttributeLength:-1,maxUniformBlockNameLength:-1},j=$.uniforms,pe=ua.getProgramParameter(S,35718),ce=0;ce<pe;++ce){var le=ua.getActiveUniform(S,ce),be=le.name;$.maxUniformLength=Math.max($.maxUniformLength,be.length+1),be.slice(-1)=="]"&&(be=be.slice(0,be.lastIndexOf("[")));var Qe=ua.getUniformLocation(S,be);if(Qe){var Ft=Be.getNewId(Be.uniforms);j[be]=[le.size,Ft],Be.uniforms[Ft]=Qe;for(var Yt=1;Yt<le.size;++Yt){var zi=be+"["+Yt+"]";Qe=ua.getUniformLocation(S,zi),Ft=Be.getNewId(Be.uniforms),Be.uniforms[Ft]=Qe}}}}},uf=["default","low-power","high-performance"];function cf(v,S){var $={},j=S>>2;$.alpha=!!o()[j+(0>>2)],$.depth=!!o()[j+(4>>2)],$.stencil=!!o()[j+(8>>2)],$.antialias=!!o()[j+(12>>2)],$.premultipliedAlpha=!!o()[j+(16>>2)],$.preserveDrawingBuffer=!!o()[j+(20>>2)];var pe=o()[j+(24>>2)];$.powerPreference=uf[pe],$.failIfMajorPerformanceCaveat=!!o()[j+(28>>2)],$.majorVersion=o()[j+(32>>2)],$.minorVersion=o()[j+(36>>2)],$.enableExtensionsByDefault=o()[j+(40>>2)],$.explicitSwapControl=o()[j+(44>>2)],$.proxyContextToMainThread=o()[j+(48>>2)],$.renderViaOffscreenBackBuffer=o()[j+(52>>2)];var ce=jl(v);if(!ce)return-4;if($.explicitSwapControl)return-1;var le=Be.createContext(ce,$);return le}function hf(v,S){return cf(v,S)}var qa={splitPath:function(v){var S=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return S.exec(v).slice(1)},normalizeArray:function(v,S){for(var $=0,j=v.length-1;j>=0;j--){var pe=v[j];pe==="."?v.splice(j,1):pe===".."?(v.splice(j,1),$++):$&&(v.splice(j,1),$--)}if(S)for(;$;$--)v.unshift("..");return v},normalize:function(v){var S=v.charAt(0)==="/",$=v.substr(-1)==="/";return v=qa.normalizeArray(v.split("/").filter(function(j){return!!j}),!S).join("/"),!v&&!S&&(v="."),v&&$&&(v+="/"),(S?"/":"")+v},dirname:function(v){var S=qa.splitPath(v),$=S[0],j=S[1];return!$&&!j?".":(j&&(j=j.substr(0,j.length-1)),$+j)},basename:function(v){if(v==="/")return"/";var S=v.lastIndexOf("/");return S===-1?v:v.substr(S+1)},extname:function(v){return qa.splitPath(v)[3]},join:function(){var v=Array.prototype.slice.call(arguments,0);return qa.normalize(v.join("/"))},join2:function(v,S){return qa.normalize(v+"/"+S)}},$i={mappings:{},buffers:[null,[],[]],printChar:function(v,S){var $=$i.buffers[v];S===0||S===10?((v===1?G:V)(Ke($,0)),$.length=0):$.push(S)},varargs:void 0,get:function(){$i.varargs+=4;var v=o()[$i.varargs-4>>2];return v},getStr:function(v){var S=Ve(v);return S},get64:function(v,S){return v}};function eh(v){return x?la(3,1,v):0}function th(v,S,$,j,pe){if(x)return la(4,1,v,S,$,j,pe)}function nh(v,S,$,j){if(x)return la(5,1,v,S,$,j);for(var pe=0,ce=0;ce<$;ce++){for(var le=o()[S+ce*8>>2],be=o()[S+(ce*8+4)>>2],Qe=0;Qe<be;Qe++)$i.printChar(v,i()[le+Qe]);pe+=be}return o()[j>>2]=pe,0}function df(v){var S=fe.exitHandlers.pop();v&&S()}function pf(v,S){fe.exitHandlers===null&&(fe.exitHandlers=[]),fe.exitHandlers.push(function(){M2(v,S)})}function rh(v){if(x)throw"Internal Error! _spawn_thread() can only ever be called from main application thread!";var S=fe.getNewWorker();if(S.pthread!==void 0)throw"Internal error!";if(!v.pthread_ptr)throw"Internal error, no pthread ptr!";fe.runningWorkers.push(S);for(var $=Zl(128*4),j=0;j<128;++j)o()[$+j*4>>2]=0;var pe=v.stackBase+v.stackSize,ce=fe.pthreads[v.pthread_ptr]={worker:S,stackBase:v.stackBase,stackSize:v.stackSize,allocatedOwnStack:v.allocatedOwnStack,thread:v.pthread_ptr,threadInfoStruct:v.pthread_ptr},le=ce.threadInfoStruct>>2;Atomics.store(l(),le+(0>>2),0),Atomics.store(l(),le+(4>>2),0),Atomics.store(l(),le+(8>>2),0),Atomics.store(l(),le+(68>>2),v.detached),Atomics.store(l(),le+(104>>2),$),Atomics.store(l(),le+(48>>2),0),Atomics.store(l(),le+(40>>2),ce.threadInfoStruct),Atomics.store(l(),le+(44>>2),42),Atomics.store(l(),le+(108>>2),v.stackSize),Atomics.store(l(),le+(84>>2),v.stackSize),Atomics.store(l(),le+(80>>2),pe),Atomics.store(l(),le+(108+8>>2),pe),Atomics.store(l(),le+(108+12>>2),v.detached),Atomics.store(l(),le+(108+20>>2),v.schedPolicy),Atomics.store(l(),le+(108+24>>2),v.schedPrio);var be=S2(),Qe=be+40;Atomics.store(l(),le+(176>>2),Qe),S.pthread=ce;var Ft={cmd:"run",start_routine:v.startRoutine,arg:v.arg,threadInfoStruct:v.pthread_ptr,selfThreadId:v.pthread_ptr,parentThreadId:v.parent_pthread_ptr,stackBase:v.stackBase,stackSize:v.stackSize};S.runPthread=function(){Ft.time=performance.now(),S.postMessage(Ft,v.transferList)},S.loaded&&(S.runPthread(),delete S.runPthread)}function ff(v,S,$){if(!S&&!$)return Hl.EINVAL;if(!v)return V("pthread_getschedparam called with a null thread pointer!"),Hl.ESRCH;var j=o()[v+12>>2];if(j!==v)return V("pthread_getschedparam attempted on thread "+v+", which does not point to a valid thread, or does not exist anymore!"),Hl.ESRCH;var pe=Atomics.load(l(),v+108+20>>2),ce=Atomics.load(l(),v+108+24>>2);return S&&(o()[S>>2]=pe),$&&(o()[$>>2]=ce),0}function kr(){return Kc|0}u._pthread_self=kr;function mf(v,S,$,j){if(typeof SharedArrayBuffer=="undefined")return V("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;if(!v)return V("pthread_create called with a null thread pointer!"),28;var pe=[],ce=0;if(x&&(pe.length===0||ce))return R2(687865856,v,S,$,j);if(ce)return ce;var le=0,be=0,Qe=0,Ft=0,Yt=0;if(S){le=o()[S>>2],le+=81920,be=o()[S+8>>2],Qe=o()[S+12>>2]!==0;var zi=o()[S+16>>2]===0;if(zi){var eu=o()[S+20>>2],zn=o()[S+24>>2],ha=fe.currentProxiedOperationCallerThread?fe.currentProxiedOperationCallerThread:kr();ff(ha,S+20,S+24),Ft=o()[S+20>>2],Yt=o()[S+24>>2],o()[S+20>>2]=eu,o()[S+24>>2]=zn}else Ft=o()[S+20>>2],Yt=o()[S+24>>2]}else le=2097152;var tu=be==0;tu?be=T2(16,le):(be-=le,ke(be>0));for(var Pi=Zl(232),kf=0;kf<232>>2;++kf)l()[(Pi>>2)+kf]=0;o()[v>>2]=Pi,o()[Pi+12>>2]=Pi;var D2=Pi+156;o()[D2>>2]=D2;var If={stackBase:be,stackSize:le,allocatedOwnStack:tu,schedPolicy:Ft,schedPrio:Yt,detached:Qe,startRoutine:$,pthread_ptr:Pi,parent_pthread_ptr:kr(),arg:j,transferList:pe};return x?(If.cmd="spawnThread",postMessage(If,pe)):rh(If),0}function Af(v){return v=+v,v>=0?+w1(v+.5):+Ei(v-.5)}function ah(v){if(x)return la(6,1,v);switch(v){case 30:return 16384;case 85:var S=2147483648;return S/16384;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:case 79:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return typeof navigator=="object"&&navigator.hardwareConcurrency||1}return O1(28),-1}x?fe.initWorker():fe.initMainThreadBlock();var ua;Be.init();var yf=[null,z1,Qc,eh,th,nh,ah],gf={e:$1,r:D1,w:P1,a:L1,l:W1,d:B1,c:Fi,h:ja,g:V1,x:U1,q:H1,B:j1,t:G1,A:K1,u:nf,k:rf,s:af,v:hf,m:eh,o:th,i:nh,p:T1,memory:Y||u.wasmMemory,y:df,z:pf,j:mf,b:kr,f:Af,n:ah,table:ue},sh=N1();u.asm=sh;var ih=u.___wasm_call_ctors=function(){return(ih=u.___wasm_call_ctors=u.asm.C).apply(null,arguments)},oh=u._init=function(){return(oh=u._init=u.asm.D).apply(null,arguments)},Gl=u._register_tensor=function(){return(Gl=u._register_tensor=u.asm.E).apply(null,arguments)},lh=u._dispose_data=function(){return(lh=u._dispose_data=u.asm.F).apply(null,arguments)},Xa=u._dispose=function(){return(Xa=u._dispose=u.asm.G).apply(null,arguments)},ql=u._Abs=function(){return(ql=u._Abs=u.asm.H).apply(null,arguments)},xf=u._Add=function(){return(xf=u._Add=u.asm.I).apply(null,arguments)},wf=u._AddN=function(){return(wf=u._AddN=u.asm.J).apply(null,arguments)},Xl=u._ArgMax=function(){return(Xl=u._ArgMax=u.asm.K).apply(null,arguments)},uh=u._AvgPool=function(){return(uh=u._AvgPool=u.asm.L).apply(null,arguments)},ch=u._BatchMatMul=function(){return(ch=u._BatchMatMul=u.asm.M).apply(null,arguments)},H=u._Ceil=function(){return(H=u._Ceil=u.asm.N).apply(null,arguments)},te=u._ClipByValue=function(){return(te=u._ClipByValue=u.asm.O).apply(null,arguments)},Ie=u._Conv2D=function(){return(Ie=u._Conv2D=u.asm.P).apply(null,arguments)},Re=u._Conv2DBackpropInput=function(){return(Re=u._Conv2DBackpropInput=u.asm.Q).apply(null,arguments)},tt=u._Cos=function(){return(tt=u._Cos=u.asm.R).apply(null,arguments)},It=u._CropAndResize=function(){return(It=u._CropAndResize=u.asm.S).apply(null,arguments)},Ze=u._Cumsum=function(){return(Ze=u._Cumsum=u.asm.T).apply(null,arguments)},Ge=u._DepthToSpace=function(){return(Ge=u._DepthToSpace=u.asm.U).apply(null,arguments)},Wt=u._DepthwiseConv2dNative=function(){return(Wt=u._DepthwiseConv2dNative=u.asm.V).apply(null,arguments)},qr=u._Equal=function(){return(qr=u._Equal=u.asm.W).apply(null,arguments)},Xr=u._Exp=function(){return(Xr=u._Exp=u.asm.X).apply(null,arguments)},hh=u._FlipLeftRight=function(){return(hh=u._FlipLeftRight=u.asm.Y).apply(null,arguments)},Kl=u._Floor=function(){return(Kl=u._Floor=u.asm.Z).apply(null,arguments)},On=u._FloorDiv=function(){return(On=u._FloorDiv=u.asm._).apply(null,arguments)},ca=u._FusedBatchNorm=function(){return(ca=u._FusedBatchNorm=u.asm.$).apply(null,arguments)},dh=u._FusedConv2D=function(){return(dh=u._FusedConv2D=u.asm.aa).apply(null,arguments)},vv=u._FusedDepthwiseConv2D=function(){return(vv=u._FusedDepthwiseConv2D=u.asm.ba).apply(null,arguments)},kv=u._Gather=function(){return(kv=u._Gather=u.asm.ca).apply(null,arguments)},Iv=u._GatherNd=function(){return(Iv=u._GatherNd=u.asm.da).apply(null,arguments)},Nv=u._Greater=function(){return(Nv=u._Greater=u.asm.ea).apply(null,arguments)},Sv=u._GreaterEqual=function(){return(Sv=u._GreaterEqual=u.asm.fa).apply(null,arguments)},Tv=u._LeakyRelu=function(){return(Tv=u._LeakyRelu=u.asm.ga).apply(null,arguments)},Ev=u._Less=function(){return(Ev=u._Less=u.asm.ha).apply(null,arguments)},Cv=u._LessEqual=function(){return(Cv=u._LessEqual=u.asm.ia).apply(null,arguments)},Rv=u._Log=function(){return(Rv=u._Log=u.asm.ja).apply(null,arguments)},Fv=u._LogicalAnd=function(){return(Fv=u._LogicalAnd=u.asm.ka).apply(null,arguments)},Mv=u._Max=function(){return(Mv=u._Max=u.asm.la).apply(null,arguments)},$v=u._MaxPool=function(){return($v=u._MaxPool=u.asm.ma).apply(null,arguments)},Dv=u._Maximum=function(){return(Dv=u._Maximum=u.asm.na).apply(null,arguments)},Ov=u._Mean=function(){return(Ov=u._Mean=u.asm.oa).apply(null,arguments)},zv=u._Min=function(){return(zv=u._Min=u.asm.pa).apply(null,arguments)},Pv=u._Minimum=function(){return(Pv=u._Minimum=u.asm.qa).apply(null,arguments)},Lv=u._Multiply=function(){return(Lv=u._Multiply=u.asm.ra).apply(null,arguments)},Wv=u._Neg=function(){return(Wv=u._Neg=u.asm.sa).apply(null,arguments)},Bv=u._NonMaxSuppressionV3=function(){return(Bv=u._NonMaxSuppressionV3=u.asm.ta).apply(null,arguments)},Vv=u._NonMaxSuppressionV4=function(){return(Vv=u._NonMaxSuppressionV4=u.asm.ua).apply(null,arguments)},Uv=u._NonMaxSuppressionV5=function(){return(Uv=u._NonMaxSuppressionV5=u.asm.va).apply(null,arguments)},Hv=u._NotEqual=function(){return(Hv=u._NotEqual=u.asm.wa).apply(null,arguments)},jv=u._OneHot=function(){return(jv=u._OneHot=u.asm.xa).apply(null,arguments)},Gv=u._PadV2=function(){return(Gv=u._PadV2=u.asm.ya).apply(null,arguments)},qv=u._Pow=function(){return(qv=u._Pow=u.asm.za).apply(null,arguments)},Xv=u._Prelu=function(){return(Xv=u._Prelu=u.asm.Aa).apply(null,arguments)},Kv=u._Prod=function(){return(Kv=u._Prod=u.asm.Ba).apply(null,arguments)},Zv=u._RealDiv=function(){return(Zv=u._RealDiv=u.asm.Ca).apply(null,arguments)},Jv=u._Relu=function(){return(Jv=u._Relu=u.asm.Da).apply(null,arguments)},Yv=u._Relu6=function(){return(Yv=u._Relu6=u.asm.Ea).apply(null,arguments)},Qv=u._ResizeBilinear=function(){return(Qv=u._ResizeBilinear=u.asm.Fa).apply(null,arguments)},e4=u._Reverse=function(){return(e4=u._Reverse=u.asm.Ga).apply(null,arguments)},t4=u._RotateWithOffset=function(){return(t4=u._RotateWithOffset=u.asm.Ha).apply(null,arguments)},n4=u._Round=function(){return(n4=u._Round=u.asm.Ia).apply(null,arguments)},r4=u._Rsqrt=function(){return(r4=u._Rsqrt=u.asm.Ja).apply(null,arguments)},a4=u._ScatterNd=function(){return(a4=u._ScatterNd=u.asm.Ka).apply(null,arguments)},s4=u._SelectV2=function(){return(s4=u._SelectV2=u.asm.La).apply(null,arguments)},i4=u._Sigmoid=function(){return(i4=u._Sigmoid=u.asm.Ma).apply(null,arguments)},o4=u._Sin=function(){return(o4=u._Sin=u.asm.Na).apply(null,arguments)},l4=u._Softmax=function(){return(l4=u._Softmax=u.asm.Oa).apply(null,arguments)},u4=u._Sqrt=function(){return(u4=u._Sqrt=u.asm.Pa).apply(null,arguments)},c4=u._Square=function(){return(c4=u._Square=u.asm.Qa).apply(null,arguments)},h4=u._SquaredDifference=function(){return(h4=u._SquaredDifference=u.asm.Ra).apply(null,arguments)},d4=u._Step=function(){return(d4=u._Step=u.asm.Sa).apply(null,arguments)},p4=u._StridedSlice=function(){return(p4=u._StridedSlice=u.asm.Ta).apply(null,arguments)},f4=u._Sub=function(){return(f4=u._Sub=u.asm.Ua).apply(null,arguments)},m4=u._Sum=function(){return(m4=u._Sum=u.asm.Va).apply(null,arguments)},A4=u._Tanh=function(){return(A4=u._Tanh=u.asm.Wa).apply(null,arguments)},y4=u._Tile=function(){return(y4=u._Tile=u.asm.Xa).apply(null,arguments)},g4=u._TopK=function(){return(g4=u._TopK=u.asm.Ya).apply(null,arguments)},x4=u._Transpose=function(){return(x4=u._Transpose=u.asm.Za).apply(null,arguments)},w4=u.__FusedMatMul=function(){return(w4=u.__FusedMatMul=u.asm._a).apply(null,arguments)},Zl=u._malloc=function(){return(Zl=u._malloc=u.asm.$a).apply(null,arguments)},Jl=u._free=function(){return(Jl=u._free=u.asm.ab).apply(null,arguments)},N2=u.___errno_location=function(){return(N2=u.___errno_location=u.asm.bb).apply(null,arguments)},S2=u._emscripten_get_global_libc=function(){return(S2=u._emscripten_get_global_libc=u.asm.cb).apply(null,arguments)},_4=u.___em_js__initPthreadsJS=function(){return(_4=u.___em_js__initPthreadsJS=u.asm.db).apply(null,arguments)},T2=u._memalign=function(){return(T2=u._memalign=u.asm.eb).apply(null,arguments)},E2=u.___pthread_tsd_run_dtors=function(){return(E2=u.___pthread_tsd_run_dtors=u.asm.fb).apply(null,arguments)},_f=u._emscripten_main_thread_process_queued_calls=function(){return(_f=u._emscripten_main_thread_process_queued_calls=u.asm.gb).apply(null,arguments)},b4=u._emscripten_current_thread_process_queued_calls=function(){return(b4=u._emscripten_current_thread_process_queued_calls=u.asm.hb).apply(null,arguments)},C2=u._emscripten_register_main_browser_thread_id=function(){return(C2=u._emscripten_register_main_browser_thread_id=u.asm.ib).apply(null,arguments)},v4=u._emscripten_main_browser_thread_id=function(){return(v4=u._emscripten_main_browser_thread_id=u.asm.jb).apply(null,arguments)},k4=u._emscripten_async_run_in_main_thread=function(){return(k4=u._emscripten_async_run_in_main_thread=u.asm.kb).apply(null,arguments)},I4=u._emscripten_sync_run_in_main_thread=function(){return(I4=u._emscripten_sync_run_in_main_thread=u.asm.lb).apply(null,arguments)},N4=u._emscripten_sync_run_in_main_thread_0=function(){return(N4=u._emscripten_sync_run_in_main_thread_0=u.asm.mb).apply(null,arguments)},S4=u._emscripten_sync_run_in_main_thread_1=function(){return(S4=u._emscripten_sync_run_in_main_thread_1=u.asm.nb).apply(null,arguments)},T4=u._emscripten_sync_run_in_main_thread_2=function(){return(T4=u._emscripten_sync_run_in_main_thread_2=u.asm.ob).apply(null,arguments)},E4=u._emscripten_sync_run_in_main_thread_xprintf_varargs=function(){return(E4=u._emscripten_sync_run_in_main_thread_xprintf_varargs=u.asm.pb).apply(null,arguments)},C4=u._emscripten_sync_run_in_main_thread_3=function(){return(C4=u._emscripten_sync_run_in_main_thread_3=u.asm.qb).apply(null,arguments)},R2=u._emscripten_sync_run_in_main_thread_4=function(){return(R2=u._emscripten_sync_run_in_main_thread_4=u.asm.rb).apply(null,arguments)},R4=u._emscripten_sync_run_in_main_thread_5=function(){return(R4=u._emscripten_sync_run_in_main_thread_5=u.asm.sb).apply(null,arguments)},F4=u._emscripten_sync_run_in_main_thread_6=function(){return(F4=u._emscripten_sync_run_in_main_thread_6=u.asm.tb).apply(null,arguments)},M4=u._emscripten_sync_run_in_main_thread_7=function(){return(M4=u._emscripten_sync_run_in_main_thread_7=u.asm.ub).apply(null,arguments)},F2=u._emscripten_run_in_main_runtime_thread_js=function(){return(F2=u._emscripten_run_in_main_runtime_thread_js=u.asm.vb).apply(null,arguments)},bf=u._emscripten_async_queue_on_thread_=function(){return(bf=u._emscripten_async_queue_on_thread_=u.asm.wb).apply(null,arguments)},$4=u._emscripten_tls_init=function(){return($4=u._emscripten_tls_init=u.asm.xb).apply(null,arguments)},Yl=u.stackSave=function(){return(Yl=u.stackSave=u.asm.yb).apply(null,arguments)},Di=u.stackAlloc=function(){return(Di=u.stackAlloc=u.asm.zb).apply(null,arguments)},Oi=u.stackRestore=function(){return(Oi=u.stackRestore=u.asm.Ab).apply(null,arguments)},M2=u.dynCall_vi=function(){return(M2=u.dynCall_vi=u.asm.Bb).apply(null,arguments)},D4=u.dynCall_v=function(){return(D4=u.dynCall_v=u.asm.Cb).apply(null,arguments)},O4=u.dynCall_ii=function(){return(O4=u.dynCall_ii=u.asm.Db).apply(null,arguments)};u.asm=sh,u.cwrap=Oe,u.PThread=fe,u.PThread=fe,u._pthread_self=kr,u.wasmMemory=Y,u.ExitStatus=$2;var Ql;u.then=function(v){if(Ql)v(u);else{var S=u.onRuntimeInitialized;u.onRuntimeInitialized=function(){S&&S(),v(u)}}return u};function $2(v){this.name="ExitStatus",this.message="Program terminated with exit("+v+")",this.status=v}Ha=function v(){Ql||vf(),Ql||(Ha=v)};function vf(v){if(v=v||p,jr>0||(Xn(),jr>0))return;function S(){Ql||(Ql=!0,u.calledRun=!0,!me&&(jc(),y1(),u.onRuntimeInitialized&&u.onRuntimeInitialized(),g1()))}u.setStatus?(u.setStatus("Running..."),setTimeout(function(){setTimeout(function(){u.setStatus("")},1),S()},1)):S()}if(u.run=vf,u.preInit)for(typeof u.preInit=="function"&&(u.preInit=[u.preInit]);u.preInit.length>0;)u.preInit.pop()();return x||(ae=!0),x||vf(),a}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),bk=nt((e,t)=>{var n=function(){var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(a){a=a||{};var s=typeof a!="undefined"?a:{},i={},o;for(o in s)s.hasOwnProperty(o)&&(i[o]=s[o]);var l=[],c="./this.program",u=function(H,te){throw te},h=!1,d=!1,p=!1,f=!1;h=typeof window=="object",d=typeof importScripts=="function",p=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",f=!h&&!p&&!d;var m="";function A(H){return s.locateFile?s.locateFile(H,m):m+H}var y,g,b,x,w,_;p?(d?m=Uu().dirname(m)+"/":m=__dirname+"/",y=function(H,te){return w||(w=require("fs")),_||(_=Uu()),H=_.normalize(H),w.readFileSync(H,te?null:"utf8")},b=function(H){var te=y(H,!0);return te.buffer||(te=new Uint8Array(te)),V(te.buffer),te},process.argv.length>1&&(c=process.argv[1].replace(/\\/g,"/")),l=process.argv.slice(2),process.on("uncaughtException",function(H){if(!(H instanceof ql))throw H}),process.on("unhandledRejection",Va),u=function(H){process.exit(H)},s.inspect=function(){return"[Emscripten Module object]"}):f?(typeof read!="undefined"&&(y=function(H){return read(H)}),b=function(H){var te;return typeof readbuffer=="function"?new Uint8Array(readbuffer(H)):(te=read(H,"binary"),V(typeof te=="object"),te)},typeof scriptArgs!="undefined"?l=scriptArgs:typeof arguments!="undefined"&&(l=arguments),typeof quit=="function"&&(u=function(H){quit(H)}),typeof print!="undefined"&&(typeof console=="undefined"&&(console={}),console.log=print,console.warn=console.error=typeof printErr!="undefined"?printErr:print)):(h||d)&&(d?m=self.location.href:document.currentScript&&(m=document.currentScript.src),r&&(m=r),m.indexOf("blob:")!==0?m=m.substr(0,m.lastIndexOf("/")+1):m="",y=function(H){var te=new XMLHttpRequest;return te.open("GET",H,!1),te.send(null),te.responseText},d&&(b=function(H){var te=new XMLHttpRequest;return te.open("GET",H,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),g=function(H,te,Ie){var Re=new XMLHttpRequest;Re.open("GET",H,!0),Re.responseType="arraybuffer",Re.onload=function(){if(Re.status==200||Re.status==0&&Re.response){te(Re.response);return}Ie()},Re.onerror=Ie,Re.send(null)},x=function(H){document.title=H});var N=s.print||console.log.bind(console),T=s.printErr||console.warn.bind(console);for(o in i)i.hasOwnProperty(o)&&(s[o]=i[o]);i=null,s.arguments&&(l=s.arguments),s.thisProgram&&(c=s.thisProgram),s.quit&&(u=s.quit);var E;s.wasmBinary&&(E=s.wasmBinary);var M;s.noExitRuntime&&(M=s.noExitRuntime),typeof WebAssembly!="object"&&T("no native wasm support detected");var z,P=new WebAssembly.Table({initial:153,maximum:153+0,element:"anyfunc"}),B=!1,G=0;function V(H,te){H||Va("Assertion failed: "+te)}function K(H){var te=s["_"+H];return V(te,"Cannot call unknown function "+H+", make sure it is exported"),te}function X(H,te,Ie,Re,tt){var It={string:function(On){var ca=0;if(On!=null&&On!==0){var dh=(On.length<<2)+1;ca=Gl(dh),ne(On,ca,dh)}return ca},array:function(On){var ca=Gl(On.length);return de(On,ca),ca}};function Ze(On){return te==="string"?Y(On):te==="boolean"?Boolean(On):On}var Ge=K(H),Wt=[],qr=0;if(Re)for(var Xr=0;Xr<Re.length;Xr++){var hh=It[Ie[Xr]];hh?(qr===0&&(qr=oh()),Wt[Xr]=hh(Re[Xr])):Wt[Xr]=Re[Xr]}var Kl=Ge.apply(null,Wt);return Kl=Ze(Kl),qr!==0&&lh(qr),Kl}function ee(H,te,Ie,Re){Ie=Ie||[];var tt=Ie.every(function(Ze){return Ze==="number"}),It=te!=="string";return It&&tt&&!Re?K(H):function(){return X(H,te,Ie,arguments,Re)}}var J=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function ae(H,te,Ie){for(var Re=te+Ie,tt=te;H[tt]&&!(tt>=Re);)++tt;if(tt-te>16&&H.subarray&&J)return J.decode(H.subarray(te,tt));for(var It="";te<tt;){var Ze=H[te++];if(!(Ze&128)){It+=String.fromCharCode(Ze);continue}var Ge=H[te++]&63;if((Ze&224)==192){It+=String.fromCharCode((Ze&31)<<6|Ge);continue}var Wt=H[te++]&63;if((Ze&240)==224?Ze=(Ze&15)<<12|Ge<<6|Wt:Ze=(Ze&7)<<18|Ge<<12|Wt<<6|H[te++]&63,Ze<65536)It+=String.fromCharCode(Ze);else{var qr=Ze-65536;It+=String.fromCharCode(55296|qr>>10,56320|qr&1023)}}return It}function Y(H,te){return H?ae(Ae,H,te):""}function ue(H,te,Ie,Re){if(!(Re>0))return 0;for(var tt=Ie,It=Ie+Re-1,Ze=0;Ze<H.length;++Ze){var Ge=H.charCodeAt(Ze);if(Ge>=55296&&Ge<=57343){var Wt=H.charCodeAt(++Ze);Ge=65536+((Ge&1023)<<10)|Wt&1023}if(Ge<=127){if(Ie>=It)break;te[Ie++]=Ge}else if(Ge<=2047){if(Ie+1>=It)break;te[Ie++]=192|Ge>>6,te[Ie++]=128|Ge&63}else if(Ge<=65535){if(Ie+2>=It)break;te[Ie++]=224|Ge>>12,te[Ie++]=128|Ge>>6&63,te[Ie++]=128|Ge&63}else{if(Ie+3>=It)break;te[Ie++]=240|Ge>>18,te[Ie++]=128|Ge>>12&63,te[Ie++]=128|Ge>>6&63,te[Ie++]=128|Ge&63}}return te[Ie]=0,Ie-tt}function ne(H,te,Ie){return ue(H,Ae,te,Ie)}function de(H,te){me.set(H,te)}var he,me,Ae,ke,Ee,Ce,Oe,Ke,Ve;function rt(H){he=H,s.HEAP8=me=new Int8Array(H),s.HEAP16=ke=new Int16Array(H),s.HEAP32=Ce=new Int32Array(H),s.HEAPU8=Ae=new Uint8Array(H),s.HEAPU16=Ee=new Uint16Array(H),s.HEAPU32=Oe=new Uint32Array(H),s.HEAPF32=Ke=new Float32Array(H),s.HEAPF64=Ve=new Float64Array(H)}var it=s.INITIAL_MEMORY||16777216;function je(H){for(;H.length>0;){var te=H.shift();if(typeof te=="function"){te(s);continue}var Ie=te.func;typeof Ie=="number"?te.arg===void 0?s.dynCall_v(Ie):s.dynCall_vi(Ie,te.arg):Ie(te.arg===void 0?null:te.arg)}}var lt=[],ut=[],Dn=[],Ye=[],wn=!1,qt=!1;function _n(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)vr(s.preRun.shift());je(lt)}function jn(){wn=!0,je(ut)}function hn(){je(Dn)}function nn(){qt=!0}function Gn(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)bn(s.postRun.shift());je(Ye)}function vr(H){lt.unshift(H)}function bn(H){Ye.unshift(H)}var Ni=Math.ceil,Pl=Math.floor,ur=0,qn=null,cr=null;function Si(H){ur++,s.monitorRunDependencies&&s.monitorRunDependencies(ur)}function Ti(H){if(ur--,s.monitorRunDependencies&&s.monitorRunDependencies(ur),ur==0&&(qn!==null&&(clearInterval(qn),qn=null),cr)){var te=cr;cr=null,te()}}s.preloadedImages={},s.preloadedAudios={};function Va(H){throw s.onAbort&&s.onAbort(H),H+="",N(H),T(H),B=!0,G=1,H="abort("+H+"). Build with -s ASSERTIONS=1 for more info.",new WebAssembly.RuntimeError(H)}function Ll(H,te){return String.prototype.startsWith?H.startsWith(te):H.indexOf(te)===0}var A1="data:application/octet-stream;base64,";function Wl(H){return Ll(H,A1)}var Hc="file://";function Bl(H){return Ll(H,Hc)}var Xn="tfjs-backend-wasm.wasm";Wl(Xn)||(Xn=A(Xn));function jc(){try{if(E)return new Uint8Array(E);if(b)return b(Xn);throw"both async and sync fetching of the wasm failed"}catch(H){Va(H)}}function y1(){return!E&&(h||d)&&typeof fetch=="function"&&!Bl(Xn)?fetch(Xn,{credentials:"same-origin"}).then(function(H){if(!H.ok)throw"failed to load wasm binary file at '"+Xn+"'";return H.arrayBuffer()}).catch(function(){return jc()}):new Promise(function(H,te){H(jc())})}function g1(){var H={env:Gr,wasi_snapshot_preview1:Gr};function te(Ze,Ge){var Wt=Ze.exports;s.asm=Wt,z=Wt.memory,rt(z.buffer),Ti("wasm-instantiate")}Si("wasm-instantiate");function Ie(Ze){te(Ze.instance)}function Re(Ze){return y1().then(function(Ge){return WebAssembly.instantiate(Ge,H)}).then(Ze,function(Ge){T("failed to asynchronously prepare wasm: "+Ge),Va(Ge)})}function tt(){if(!E&&typeof WebAssembly.instantiateStreaming=="function"&&!Wl(Xn)&&!Bl(Xn)&&typeof fetch=="function")fetch(Xn,{credentials:"same-origin"}).then(function(Ze){var Ge=WebAssembly.instantiateStreaming(Ze,H);return Ge.then(Ie,function(Wt){T("wasm streaming compile failed: "+Wt),T("falling back to ArrayBuffer instantiation"),Re(Ie)})});else return Re(Ie)}if(s.instantiateWasm)try{var It=s.instantiateWasm(H,te);return It}catch(Ze){return T("Module.instantiateWasm callback failed with error: "+Ze),!1}return tt(),{}}ut.push();function x1(H){rt(z.buffer)}var Ua={splitPath:function(H){var te=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return te.exec(H).slice(1)},normalizeArray:function(H,te){for(var Ie=0,Re=H.length-1;Re>=0;Re--){var tt=H[Re];tt==="."?H.splice(Re,1):tt===".."?(H.splice(Re,1),Ie++):Ie&&(H.splice(Re,1),Ie--)}if(te)for(;Ie;Ie--)H.unshift("..");return H},normalize:function(H){var te=H.charAt(0)==="/",Ie=H.substr(-1)==="/";return H=Ua.normalizeArray(H.split("/").filter(function(Re){return!!Re}),!te).join("/"),!H&&!te&&(H="."),H&&Ie&&(H+="/"),(te?"/":"")+H},dirname:function(H){var te=Ua.splitPath(H),Ie=te[0],Re=te[1];return!Ie&&!Re?".":(Re&&(Re=Re.substr(0,Re.length-1)),Ie+Re)},basename:function(H){if(H==="/")return"/";var te=H.lastIndexOf("/");return te===-1?H:H.substr(te+1)},extname:function(H){return Ua.splitPath(H)[3]},join:function(){var H=Array.prototype.slice.call(arguments,0);return Ua.normalize(H.join("/"))},join2:function(H,te){return Ua.normalize(H+"/"+te)}},Ei={mappings:{},buffers:[null,[],[]],printChar:function(H,te){var Ie=Ei.buffers[H];te===0||te===10?((H===1?N:T)(ae(Ie,0)),Ie.length=0):Ie.push(te)},varargs:void 0,get:function(){Ei.varargs+=4;var H=Ce[Ei.varargs-4>>2];return H},getStr:function(H){var te=Y(H);return te},get64:function(H,te){return H}};function w1(H){return 0}function jr(H,te,Ie,Re,tt){}function Vl(H,te,Ie,Re){for(var tt=0,It=0;It<Ie;It++){for(var Ze=Ce[te+It*8>>2],Ge=Ce[te+(It*8+4)>>2],Wt=0;Wt<Ge;Wt++)Ei.printChar(H,Ae[Ze+Wt]);tt+=Ge}return Ce[Re>>2]=tt,0}function Ha(H){uh(H)}function _1(H){Ha(H)}function b1(H){return H=+H,H>=0?+Pl(H+.5):+Ni(H-.5)}var Gr={emscripten_notify_memory_growth:x1,fd_close:w1,fd_seek:jr,fd_write:Vl,proc_exit:_1,roundf:b1},Ul=g1();s.asm=Ul;var v1=s._init=function(){return(v1=s._init=s.asm.init).apply(null,arguments)},Gc=s._register_tensor=function(){return(Gc=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},k1=s._dispose_data=function(){return(k1=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},qc=s._dispose=function(){return(qc=s._dispose=s.asm.dispose).apply(null,arguments)},Kn=s._Abs=function(){return(Kn=s._Abs=s.asm.Abs).apply(null,arguments)},Xc=s._Add=function(){return(Xc=s._Add=s.asm.Add).apply(null,arguments)},I1=s._AddN=function(){return(I1=s._AddN=s.asm.AddN).apply(null,arguments)},N1=s._ArgMax=function(){return(N1=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},S1=s._AvgPool=function(){return(S1=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},T1=s._BatchMatMul=function(){return(T1=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Kc=s._Ceil=function(){return(Kc=s._Ceil=s.asm.Ceil).apply(null,arguments)},Zc=s._ClipByValue=function(){return(Zc=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Jc=s._Conv2D=function(){return(Jc=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Ci=s._Conv2DBackpropInput=function(){return(Ci=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Hl=s._Cos=function(){return(Hl=s._Cos=s.asm.Cos).apply(null,arguments)},Ri=s._CropAndResize=function(){return(Ri=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Fi=s._Cumsum=function(){return(Fi=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},E1=s._DepthToSpace=function(){return(E1=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},C1=s._DepthwiseConv2dNative=function(){return(C1=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},R1=s._Equal=function(){return(R1=s._Equal=s.asm.Equal).apply(null,arguments)},fe=s._Exp=function(){return(fe=s._Exp=s.asm.Exp).apply(null,arguments)},F1=s._FlipLeftRight=function(){return(F1=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},M1=s._Floor=function(){return(M1=s._Floor=s.asm.Floor).apply(null,arguments)},$1=s._FloorDiv=function(){return($1=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},D1=s._FusedBatchNorm=function(){return(D1=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},ja=s._FusedConv2D=function(){return(ja=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},O1=s._FusedDepthwiseConv2D=function(){return(O1=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},z1=s._Gather=function(){return(z1=s._Gather=s.asm.Gather).apply(null,arguments)},P1=s._GatherNd=function(){return(P1=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},L1=s._Greater=function(){return(L1=s._Greater=s.asm.Greater).apply(null,arguments)},W1=s._GreaterEqual=function(){return(W1=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},B1=s._LeakyRelu=function(){return(B1=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},V1=s._Less=function(){return(V1=s._Less=s.asm.Less).apply(null,arguments)},U1=s._LessEqual=function(){return(U1=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},H1=s._Log=function(){return(H1=s._Log=s.asm.Log).apply(null,arguments)},j1=s._LogicalAnd=function(){return(j1=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},la=s._Max=function(){return(la=s._Max=s.asm.Max).apply(null,arguments)},Ga=s._MaxPool=function(){return(Ga=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Mi=s._Maximum=function(){return(Mi=s._Maximum=s.asm.Maximum).apply(null,arguments)},G1=s._Mean=function(){return(G1=s._Mean=s.asm.Mean).apply(null,arguments)},q1=s._Min=function(){return(q1=s._Min=s.asm.Min).apply(null,arguments)},X1=s._Minimum=function(){return(X1=s._Minimum=s.asm.Minimum).apply(null,arguments)},K1=s._Multiply=function(){return(K1=s._Multiply=s.asm.Multiply).apply(null,arguments)},Le=s._Neg=function(){return(Le=s._Neg=s.asm.Neg).apply(null,arguments)},Z1=s._NonMaxSuppressionV3=function(){return(Z1=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},J1=s._NonMaxSuppressionV4=function(){return(J1=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},Y1=s._NonMaxSuppressionV5=function(){return(Y1=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},Q1=s._NotEqual=function(){return(Q1=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},ef=s._OneHot=function(){return(ef=s._OneHot=s.asm.OneHot).apply(null,arguments)},tf=s._PadV2=function(){return(tf=s._PadV2=s.asm.PadV2).apply(null,arguments)},jl=s._Pow=function(){return(jl=s._Pow=s.asm.Pow).apply(null,arguments)},Yc=s._Prelu=function(){return(Yc=s._Prelu=s.asm.Prelu).apply(null,arguments)},Qc=s._Prod=function(){return(Qc=s._Prod=s.asm.Prod).apply(null,arguments)},nf=s._RealDiv=function(){return(nf=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},rf=s._Relu=function(){return(rf=s._Relu=s.asm.Relu).apply(null,arguments)},af=s._Relu6=function(){return(af=s._Relu6=s.asm.Relu6).apply(null,arguments)},sf=s._ResizeBilinear=function(){return(sf=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},of=s._Reverse=function(){return(of=s._Reverse=s.asm.Reverse).apply(null,arguments)},lf=s._RotateWithOffset=function(){return(lf=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Be=s._Round=function(){return(Be=s._Round=s.asm.Round).apply(null,arguments)},uf=s._Rsqrt=function(){return(uf=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},cf=s._ScatterNd=function(){return(cf=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},hf=s._SelectV2=function(){return(hf=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},qa=s._Sigmoid=function(){return(qa=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},$i=s._Sin=function(){return($i=s._Sin=s.asm.Sin).apply(null,arguments)},eh=s._Softmax=function(){return(eh=s._Softmax=s.asm.Softmax).apply(null,arguments)},th=s._Sqrt=function(){return(th=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},nh=s._Square=function(){return(nh=s._Square=s.asm.Square).apply(null,arguments)},df=s._SquaredDifference=function(){return(df=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},pf=s._Step=function(){return(pf=s._Step=s.asm.Step).apply(null,arguments)},rh=s._StridedSlice=function(){return(rh=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},ff=s._Sub=function(){return(ff=s._Sub=s.asm.Sub).apply(null,arguments)},kr=s._Sum=function(){return(kr=s._Sum=s.asm.Sum).apply(null,arguments)},mf=s._Tanh=function(){return(mf=s._Tanh=s.asm.Tanh).apply(null,arguments)},Af=s._Tile=function(){return(Af=s._Tile=s.asm.Tile).apply(null,arguments)},ah=s._TopK=function(){return(ah=s._TopK=s.asm.TopK).apply(null,arguments)},ua=s._Transpose=function(){return(ua=s._Transpose=s.asm.Transpose).apply(null,arguments)},yf=s.__FusedMatMul=function(){return(yf=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},gf=s._malloc=function(){return(gf=s._malloc=s.asm.malloc).apply(null,arguments)},sh=s._free=function(){return(sh=s._free=s.asm.free).apply(null,arguments)},ih=s.__start=function(){return(ih=s.__start=s.asm._start).apply(null,arguments)},oh=s.stackSave=function(){return(oh=s.stackSave=s.asm.stackSave).apply(null,arguments)},Gl=s.stackAlloc=function(){return(Gl=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},lh=s.stackRestore=function(){return(lh=s.stackRestore=s.asm.stackRestore).apply(null,arguments)};s.asm=Ul,s.cwrap=ee;var Xa;s.then=function(H){if(Xa)H(s);else{var te=s.onRuntimeInitialized;s.onRuntimeInitialized=function(){te&&te(),H(s)}}return s};function ql(H){this.name="ExitStatus",this.message="Program terminated with exit("+H+")",this.status=H}var xf=!1;cr=function H(){Xa||Xl(),Xa||(cr=H)};function wf(H){var te=s.__start;try{te();var Ie=0;uh(Ie,!0)}catch(tt){if(tt instanceof ql)return;if(tt=="unwind"){M=!0;return}else{var Re=tt;tt&&typeof tt=="object"&&tt.stack&&(Re=[tt,tt.stack]),T("exception thrown: "+Re),u(1,tt)}}finally{xf=!0}}function Xl(H){if(H=H||l,ur>0||(_n(),ur>0))return;function te(){Xa||(Xa=!0,s.calledRun=!0,!B&&(jn(),hn(),s.onRuntimeInitialized&&s.onRuntimeInitialized(),ch&&wf(H),Gn()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),te()},1)):te()}s.run=Xl;function uh(H,te){te&&M&&H===0||(M||(B=!0,G=H,nn(),s.onExit&&s.onExit(H)),u(H,new ql(H)))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();var ch=!0;return s.noInitialRun&&(ch=!1),M=!0,Xl(),a}}();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),vk=nt((e,t)=>{(function(n,r,a){function s(c){var u=this,h=l();u.next=function(){var d=2091639*u.s0+u.c*23283064365386963e-26;return u.s0=u.s1,u.s1=u.s2,u.s2=d-(u.c=d|0)},u.c=1,u.s0=h(" "),u.s1=h(" "),u.s2=h(" "),u.s0-=h(c),u.s0<0&&(u.s0+=1),u.s1-=h(c),u.s1<0&&(u.s1+=1),u.s2-=h(c),u.s2<0&&(u.s2+=1),h=null}function i(c,u){return u.c=c.c,u.s0=c.s0,u.s1=c.s1,u.s2=c.s2,u}function o(c,u){var h=new s(c),d=u&&u.state,p=h.next;return p.int32=function(){return h.next()*4294967296|0},p.double=function(){return p()+(p()*2097152|0)*11102230246251565e-32},p.quick=p,d&&(typeof d=="object"&&i(d,h),p.state=function(){return i(h,{})}),p}function l(){var c=4022871197,u=function(h){h=String(h);for(var d=0;d<h.length;d++){c+=h.charCodeAt(d);var p=.02519603282416938*c;c=p>>>0,p-=c,p*=c,c=p>>>0,p-=c,c+=p*4294967296}return(c>>>0)*23283064365386963e-26};return u}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),kk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Ik=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,l===(l|0)?c.x=l:u+=l;for(var h=0;h<u.length+64;h++)c.x^=u.charCodeAt(h)|0,h==u.length&&(c.d=c.x<<10^c.x>>>4),c.next()}function i(l,c){return c.x=l.x,c.y=l.y,c.z=l.z,c.w=l.w,c.v=l.v,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Nk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.x,d=c.i,p,f,m;return p=h[d],p^=p>>>7,f=p^p<<24,p=h[d+1&7],f^=p^p>>>10,p=h[d+3&7],f^=p^p>>>3,p=h[d+4&7],f^=p^p<<7,p=h[d+7&7],p=p^p<<13,f^=p^p<<9,h[d]=f,c.i=d+1&7,f};function u(h,d){var p,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,p=0;p<d.length;++p)m[p&7]=m[p&7]<<15^d.charCodeAt(p)+m[p+1&7]<<13;for(;m.length<8;)m.push(0);for(p=0;p<8&&m[p]===0;++p);for(p==8?f=m[7]=-1:f=m[p],h.x=m,h.i=0,p=256;p>0;--p)h.next()}u(c,l)}function i(l,c){return c.x=l.x.slice(),c.i=l.i,c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.x&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Sk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this;c.next=function(){var h=c.w,d=c.X,p=c.i,f,m;return c.w=h=h+1640531527|0,m=d[p+34&127],f=d[p=p+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[p]=m^f,c.i=p,m+(h^h>>>16)|0};function u(h,d){var p,f,m,A,y,g=[],b=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,b=Math.max(b,d.length)),m=0,A=-32;A<b;++A)d&&(f^=d.charCodeAt((A+32)%d.length)),A===0&&(y=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,A>=0&&(y=y+1640531527|0,p=g[A&127]^=f+y,m=p==0?m+1:0);for(m>=128&&(g[(d&&d.length||0)&127]=-1),m=127,A=4*128;A>0;--A)f=g[m+34&127],p=g[m=m+1&127],f^=f<<13,p^=p<<17,f^=f>>>15,p^=p>>>12,g[m]=f^p;h.w=y,h.X=g,h.i=m}u(c,l)}function i(l,c){return c.i=l.i,c.w=l.w,c.X=l.X.slice(),c}function o(l,c){l==null&&(l=+new Date);var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(h.X&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Tk=nt((e,t)=>{(function(n,r,a){function s(l){var c=this,u="";c.next=function(){var d=c.b,p=c.c,f=c.d,m=c.a;return d=d<<25^d>>>7^p,p=p-f|0,f=f<<24^f>>>8^m,m=m-d|0,c.b=d=d<<20^d>>>12^p,c.c=p=p-f|0,c.d=f<<16^p>>>16^m,c.a=m-d|0},c.a=0,c.b=0,c.c=2654435769|0,c.d=1367130551,l===Math.floor(l)?(c.a=l/4294967296|0,c.b=l|0):u+=l;for(var h=0;h<u.length+20;h++)c.b^=u.charCodeAt(h)|0,c.next()}function i(l,c){return c.a=l.a,c.b=l.b,c.c=l.c,c.d=l.d,c}function o(l,c){var u=new s(l),h=c&&c.state,d=function(){return(u.next()>>>0)/4294967296};return d.double=function(){do var p=u.next()>>>11,f=(u.next()>>>0)/4294967296,m=(p+f)/(1<<21);while(m===0);return m},d.int32=u.next,d.quick=d,h&&(typeof h=="object"&&i(h,u),d.state=function(){return i(u,{})}),d}r&&r.exports?r.exports=o:a&&a.amd?a(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Ek=nt((e,t)=>{(function(n,r,a){var s=256,i=6,o=52,l="random",c=a.pow(s,i),u=a.pow(2,o),h=u*2,d=s-1,p;function f(w,_,N){var T=[];_=_==!0?{entropy:!0}:_||{};var E=g(y(_.entropy?[w,x(r)]:w==null?b():w,3),T),M=new m(T),z=function(){for(var P=M.g(i),B=c,G=0;P<u;)P=(P+G)*s,B*=s,G=M.g(1);for(;P>=h;)P/=2,B/=2,G>>>=1;return(P+G)/B};return z.int32=function(){return M.g(4)|0},z.quick=function(){return M.g(4)/4294967296},z.double=z,g(x(M.S),r),(_.pass||N||function(P,B,G,V){return V&&(V.S&&A(V,M),P.state=function(){return A(M,{})}),G?(a[l]=P,B):P})(z,E,"global"in _?_.global:this==a,_.state)}function m(w){var _,N=w.length,T=this,E=0,M=T.i=T.j=0,z=T.S=[];for(N||(w=[N++]);E<s;)z[E]=E++;for(E=0;E<s;E++)z[E]=z[M=d&M+w[E%N]+(_=z[E])],z[M]=_;(T.g=function(P){for(var B,G=0,V=T.i,K=T.j,X=T.S;P--;)B=X[V=d&V+1],G=G*s+X[d&(X[V]=X[K=d&K+B])+(X[K]=B)];return T.i=V,T.j=K,G})(s)}function A(w,_){return _.i=w.i,_.j=w.j,_.S=w.S.slice(),_}function y(w,_){var N=[],T=typeof w,E;if(_&&T=="object")for(E in w)try{N.push(y(w[E],_-1))}catch(M){}return N.length?N:T=="string"?w:w+"\0"}function g(w,_){for(var N=w+"",T,E=0;E<N.length;)_[d&E]=d&(T^=_[d&E]*19)+N.charCodeAt(E++);return x(_)}function b(){try{var w;return p&&(w=p.randomBytes)?w=w(s):(w=new Uint8Array(s),(n.crypto||n.msCrypto).getRandomValues(w)),x(w)}catch(T){var _=n.navigator,N=_&&_.plugins;return[+new Date,n,N,n.screen,x(r)]}}function x(w){return String.fromCharCode.apply(0,w)}if(g(a.random(),r),typeof t=="object"&&t.exports){t.exports=f;try{p=gm()}catch(w){}}else typeof define=="function"&&define.amd?define(function(){return f}):a["seed"+l]=f})(typeof self!="undefined"?self:e,[],Math)}),U0=nt((e,t)=>{var n=vk(),r=kk(),a=Ik(),s=Nk(),i=Sk(),o=Tk(),l=Ek();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),Ck=nt(()=>{}),Rk="3.1.0",Fk="3.1.0",Mk="3.1.0",$k="3.1.0",Dk="3.1.0",Ok=1e-7,zk=1e-4,mh=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},nu=class{refCount(e){return nr("refCount")}incRef(e){return nr("incRef")}timerAvailable(){return!0}time(e){return nr("time")}read(e){return nr("read")}readSync(e){return nr("readSync")}numDataIds(){return nr("numDataIds")}disposeData(e,t){return nr("disposeData")}write(e,t,n){return nr("write")}move(e,t,n,r,a){return nr("move")}memory(){return nr("memory")}floatPrecision(){return nr("floatPrecision")}epsilon(){return this.floatPrecision()===32?Ok:zk}dispose(){return nr("dispose")}};function nr(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function H0(e){let t=e.length,n=0,r=0;for(;t>0;)r=Math.random()*t|0,t--,n=e[t],e[t]=e[r],e[r]=n}function Pk(e,t){if(e.length!==t.length)throw Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r,a,s=0;for(;n>0;)s=Math.random()*n|0,n--,r=e[n],a=t[n],e[n]=e[s],t[n]=t[s],e[s]=r,t[s]=a}function Hu(e,t,n){return Math.max(e,Math.min(t,n))}function Lk(e){return e%2==0?e:e+1}function Wk(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function Bk(e,t){let n=Math.random();return t*n+(1-n)*e}function Vk(e,t){let n=0;for(let r=0;r<e.length;r++){let a=Number(e[r])-Number(t[r]);n+=a*a}return n}function F(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function en(e,t,n=""){F(ea(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function Ks(e){F(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Zs(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||tn(e)&&!n)for(let r=0;r<e.length;++r)Zs(e[r],t,n);else t.push(e);return t}function Dt(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function Uk(e){return e.length===0}function ea(e,t){if(e===t)return!0;if(e==null||t==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function Ut(e){return e%1==0}function Hk(e){if(Math.tanh!=null)return Math.tanh(e);if(e===Infinity)return 1;if(e===-Infinity)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function jk(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function Gk(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return H0(t),t}function ju(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function qk(e,t=r=>0,n){return new Promise((r,a)=>{let s=0,i=()=>{if(e()){r();return}s++;let o=t(s);if(n!=null&&s>=n){a();return}setTimeout(i,o)};i()})}function Xk(e,t){let n=1,r=-1;for(let s=0;s<e.length;++s)if(e[s]>=0)n*=e[s];else if(e[s]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${s}`);r=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(r===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let a=e.slice();return a[r]=t/n,a}function rr(e,t){let n=t.length;return e=e==null?t.map((r,a)=>a):[].concat(e),F(e.every(r=>r>=-n&&r<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),F(e.every(r=>Ut(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function j0(e,t){let n=[],r=[],a=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||a?null:rr(t,e).sort(),i=0;for(let o=0;o<e.length;++o){if(s!=null){if(s[i]===o&&e[o]!==1)throw new Error(`Can't squeeze axis ${o} since its dim '${e[o]}' is not 1`);(s[i]==null||s[i]>o)&&e[o]===1&&(n.push(e[o]),r.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),r.push(o))}return{newShape:n,keptDims:r}}function G0(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function q0(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function X0(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(isNaN(r)||!isFinite(r))throw Error(`A tensor of type ${t} being uploaded contains ${r}.`)}}function K0(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function Kk(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function tn(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array}function xm(e){if(e==="float32"||e==="int32")return 4;if(e==="complex64")return 8;if(e==="bool")return 1;throw new Error(`Unknown dtype ${e}`)}function Z0(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function ka(e){return typeof e=="string"||e instanceof String}function J0(e){return typeof e=="boolean"}function Y0(e){return typeof e=="number"}function $d(e){return Array.isArray(e)?$d(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":Y0(e)?"float32":ka(e)?"string":J0(e)?"bool":"float32"}function Ia(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Dd(e,t){for(let n=t;n<e;++n)if(e%n==0)return n;return e}function el(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let r=t-3;r>=0;--r)n[r]=n[r+1]*e[r+1];return n}function Q0(e,t,n){let r=new Array;if(t.length===1){let a=t[0];for(let s=0;s<a;s++)r[s]=n[e+s]}else{let a=t[0],s=t.slice(1),i=s.reduce((o,l)=>o*l);for(let o=0;o<a;o++)r[o]=Q0(e+o*i,s,n)}return r}function tl(e,t){if(e.length===0)return t[0];let n=e.reduce((r,a)=>r*a);if(n===0)return[];if(n!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}.`);return Q0(0,e,t)}function wm(e,t){let n=Od(e,t);for(let r=0;r<n.length;r++)n[r]=1;return n}function Od(e,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool")return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function Zk(e,t){let n=e.reduce((r,a)=>r*a,1);if(t==null||t==="float32")return tl(e,new Float32Array(n));if(t==="int32")return tl(e,new Int32Array(n));if(t==="bool")return tl(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function _m(e){e.forEach(t=>{F(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function Jk(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let a=0;a<e.length-1;++a)r+=n[a]*e[a];return r}function Yk(e,t,n){if(t===0)return[];if(t===1)return[e];let r=new Array(t);for(let a=0;a<r.length-1;++a)r[a]=Math.floor(e/n[a]),e-=r[a]*n[a];return r[r.length-1]=e,r}function bm(e){return e&&e.then&&typeof e.then=="function"}var e5="tfjsflags",P2=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${t}.`),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let r=this.urlFlags[e];console.warn(`Setting feature override from URL ${e}: ${r}.`),this.set(e,r)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(bm(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(this.flagRegistry[e]==null)throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,this.flagRegistry[e].setHook!=null&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(this.flagRegistry[e]==null)throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let e=Qk(this.global.location.search);e5 in e&&e[e5].split(",").forEach(t=>{let[n,r]=t.split(":");this.urlFlags[n]=e9(n,r)})}};function Qk(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(t9(t,r[0],r[1]),r.join("="))),t}function t9(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function e9(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function Q(){return pa}var pa=null;function n9(e){pa=e}var vm;function t5(){if(vm==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");vm=e}return vm}function r9(){let e=t5();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function km(e,t){let n=r9();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var Li="Abs",Wi="Acos",Bi="Acosh",fa="Add",Ka="AddN",Ah="All",yh="Any",Za="ArgMax",ru="ArgMin",Vi="Asin",Ui="Asinh",Hi="Atan",ji="Atanh",Gi="Atan2",Ja="AvgPool",gh="AvgPoolGrad",au="AvgPool3D",xh="AvgPool3DGrad",Ya="BatchMatMul",su="BatchToSpaceND",wh="Bincount",L2="BroadcastTo",Qa="Cast",es="Ceil",ma="ClipByValue",_h="Complex",iu="ComplexAbs",qi="Concat",ts="Conv2D",bh="Conv2DBackpropFilter",ns="Conv2DBackpropInput",ou="Conv3D",vh="Conv3DBackpropFilterV2",kh="Conv3DBackpropInputV2",rs="Cos",Xi="Cosh",as="Cumsum",Ki="CropAndResize",Ih="DenseBincount",Zi="DepthToSpace",ss="DepthwiseConv2dNative",Nh="DepthwiseConv2dNativeBackpropFilter",Sh="DepthwiseConv2dNativeBackpropInput",Th="Diag",lu="Dilation2D",Eh="Dilation2DBackpropInput",Ch="Dilation2DBackpropFilter",is="RealDiv",Ji="Elu",Rh="EluGrad",Yi="Erf",Qi="Equal",os="Exp",eo="ExpandDims",to="Expm1",Fh="FFT",uu="Fill",no="FlipLeftRight",ls="Floor",us="FloorDiv",cs="FusedBatchNorm",ro="GatherV2",ao="GatherNd",so="Greater",hs="GreaterEqual",ds="Identity",Mh="IFFT",$h="Imag",io="IsFinite",oo="IsInf",lo="IsNan",ps="LeakyRelu",uo="Less",co="LessEqual",Dh="LinSpace",fs="Log",ho="Log1p",po="LogicalAnd",cu="LogicalNot",hu="LogicalOr",W2="LogSoftmax",du="LRN",Oh="LRNGrad",ms="Max",As="Maximum",ys="MaxPool",zh="MaxPoolGrad",pu="MaxPool3D",Ph="MaxPool3DGrad",Lh="MaxPoolWithArgmax",gs="Mean",xs="Min",ws="Minimum",fu="MirrorPad",fo="Mod",Wh="Multinomial",_s="Multiply",mo="Neg",Ao="NotEqual",yo="NonMaxSuppressionV3",go="NonMaxSuppressionV4",xo="NonMaxSuppressionV5",wo="OnesLike",bs="OneHot",_o="Pack",vs="PadV2",q4="Pool",ks="Pow",Is="Prelu",bo="Prod",mu="Range",Bh="Real",vo="Reciprocal",Ns="Relu",ko="Reshape",Au="ResizeNearestNeighbor",Vh="ResizeNearestNeighborGrad",Ss="ResizeBilinear",Uh="ResizeBilinearGrad",Ts="Relu6",Es="Reverse",Cs="Round",Rs="Rsqrt",Io="ScatterNd",No="Select",So="Selu",To="Slice",Fs="Sin",Eo="Sinh",Co="Sign",Ms="Sigmoid",Ro="Softplus",$s="Sqrt",Ds="Sum",yu="SpaceToBatchND",Fo="SplitV",Os="Softmax",zs="SquaredDifference",gu="Square",Ps="Sub",Hh="SparseToDense",Mo="StridedSlice",$o="Tan",Ls="Tanh",Aa="Tile",Do="TopK",Ws="Transpose",jh="Unique",Oo="Unpack",xu="UnsortedSegmentSum",zo="ZerosLike",ya="Step",Gh="FromPixels",Po="RotateWithOffset",Bs="_FusedMatMul",Vs="FusedConv2D",Us="FusedDepthwiseConv2D",nl=km("kernelRegistry",()=>new Map),Gu=km("gradRegistry",()=>new Map);function qh(e,t){let n=Im(e,t);return nl.get(n)}function Tf(e){return Gu.get(e)}function wu(e){let t=nl.entries(),n=[];for(;;){let{done:r,value:a}=t.next();if(r)break;let[s,i]=a,[o]=s.split("_");o===e&&n.push(i)}return n}function Lo(e){let{kernelName:t,backendName:n}=e,r=Im(t,n);nl.has(r)&&console.warn(`The kernel '${t}' for backend '${n}' is already registered`),nl.set(r,e)}function B2(e){let{kernelName:t}=e;Gu.has(t)&&Q().getBool("DEBUG")&&console.warn(`Overriding the gradient for '${t}'`),Gu.set(t,e)}function X4(e,t){let n=Im(e,t);if(!nl.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);nl.delete(n)}function K4(e){if(!Gu.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Gu.delete(e)}function Z4(e,t){wu(e).forEach(n=>{let r=Object.assign({},n,{backendName:t});Lo(r)})}function Im(e,t){return`${t}_${e}`}var k={};ze(k,{arraysEqual:()=>ea,assert:()=>F,assertNonNegativeIntegerDimensions:()=>_m,assertNonNull:()=>Ks,assertShapesMatch:()=>en,bytesFromStringArray:()=>Z0,bytesPerElement:()=>xm,checkConversionForErrors:()=>X0,clamp:()=>Hu,computeStrides:()=>el,createScalarValue:()=>a9,createShuffledIndices:()=>Gk,decodeString:()=>Pd,distSquared:()=>Vk,encodeString:()=>Xu,fetch:()=>s9,flatten:()=>Zs,getArrayFromDType:()=>q0,getTypedArrayFromDType:()=>G0,hasEncodingLoss:()=>Kk,indexToLoc:()=>Yk,inferDtype:()=>$d,inferFromImplicitShape:()=>Xk,isBoolean:()=>J0,isFunction:()=>Ia,isInt:()=>Ut,isNumber:()=>Y0,isPromise:()=>bm,isScalarShape:()=>Uk,isString:()=>ka,isTypedArray:()=>tn,isValidDtype:()=>K0,locToIndex:()=>Jk,makeOnesTypedArray:()=>wm,makeZerosNestedTypedArray:()=>Zk,makeZerosTypedArray:()=>Od,nearestDivisor:()=>Dd,nearestLargerEven:()=>Lk,now:()=>qu,parseAxisParam:()=>rr,randUniform:()=>Bk,repeatedTry:()=>qk,rightPad:()=>ju,shuffle:()=>H0,shuffleCombo:()=>Pk,sizeFromShape:()=>Dt,sizeToSquarishShape:()=>jk,squeezeShape:()=>j0,sum:()=>Wk,tanh:()=>Hk,toNestedArray:()=>tl,toTypedArray:()=>zd});function a9(e,t){return t==="string"?Xu(e):zd([e],t)}function i9(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function zd(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Zs(e)),Q().getBool("DEBUG")&&X0(e,t),i9(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let r=0;r<n.length;++r)Math.round(e[r])!==0&&(n[r]=1);return n}else throw new Error(`Unknown data type ${t}`)}function qu(){return Q().platform.now()}function s9(e,t){return Q().platform.fetch(e,t)}function Xu(e,t="utf-8"){return t=t||"utf-8",Q().platform.encode(e,t)}function Pd(e,t="utf-8"){return t=t||"utf-8",Q().platform.decode(e,t)}var u9=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new l9)}profileKernel(e,t,n){let r,a=()=>{r=n()},s,i=qu();if(this.backendTimer.timerAvailable()?s=this.backendTimer.time(a):(a(),r.map(o=>o.dataSync()),s=Promise.resolve({kernelMs:qu()-i})),Q().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o<r.length;o++){let l=r[o];l.data().then(c=>{o9(c,l.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:a,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),r,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],a,o[2])})})}};function o9(e,t,n){if(t!=="float32")return!1;for(let r=0;r<e.length;r++){let a=e[r];if(isNaN(a)||!isFinite(a))return console.warn(`Found ${a} in the result of '${n}'`),!0}return!1}var l9=class{logKernelProfile(e,t,n,r,a,s){let i=typeof r=="number"?ju(`${r}ms`,9):r.error,o=ju(e,25),l=t.rank,c=t.size,u=ju(t.shape.toString(),14),h="";for(let d in a){let p=a[d];if(p!=null){let f=p.shape||t.shape,m=f.length;h+=`${d}: ${m}D ${m>0?f:""} `}}console.log(`%c${o} %c${i} %c${l}D ${u} %c${c} %c${h} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function c9(e,t,n){let r={},a={};for(let l=0;l<t.length;l++)r[t[l].id]=!0;for(let l=0;l<e.length;l++){let c=e[l],u=c.inputs;for(let h in u){let d=u[h],p=!1;for(let f=0;f<t.length;f++)if(r[d.id]){c.outputs.forEach(m=>r[m.id]=!0),p=!0,a[c.id]=!0;break}if(p)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let c=e[l],u=c.inputs;for(let h=0;h<c.outputs.length;h++)if(s[c.outputs[h].id]){for(let d in u)s[u[d].id]=!0,i[c.id]=!0;break}}let o=[];for(let l=0;l<e.length;l++){let c=e[l];if(a[c.id]&&i[c.id]){let u={};for(let d in c.inputs){let p=c.inputs[d];r[p.id]&&(u[d]=p)}let h=Object.assign({},c);h.inputs=u,h.outputs=c.outputs,o.push(h)}}return o}function h9(e,t,n,r){for(let a=t.length-1;a>=0;a--){let s=t[a],i=[];if(s.outputs.forEach(l=>{let c=e[l.id];c!=null?i.push(c):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let c=n(()=>o[l]());if(c.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${c.dtype}'`);let u=s.inputs[l];if(!ea(c.shape,u.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${c.shape}', which does not match the shape of the input '${u.shape}'`);if(e[u.id]==null)e[u.id]=c;else{let h=e[u.id];e[u.id]=r(h,c),h.dispose()}}}}var n5=20,Ku=3,Nm=7;function p9(e,t,n,r){let a=el(t),s=d9(e,t,n,a),i=t.length,o=Ld(e,t,n,a,s),l=["Tensor"];return r&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(c=>" "+c).join(`
|
|
`)),l.join(`
|
|
`)}function d9(e,t,n,r){let a=Dt(t),s=r[r.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Ju(e):e;if(o>1)for(let c=0;c<a/s;c++){let u=c*s;for(let h=0;h<s;h++)i[h]=Math.max(i[h],Zu(l[u+h],0,n).length)}return i}function Zu(e,t,n){let r;return Array.isArray(e)?r=`${parseFloat(e[0].toFixed(Nm))} + ${parseFloat(e[1].toFixed(Nm))}j`:ka(e)?r=`'${e}'`:n==="bool"?r=r5(e):r=parseFloat(e.toFixed(Nm)).toString(),ju(r,t)}function r5(e){return e===0?"false":"true"}function Ld(e,t,n,r,a,s=!0){let i=n==="complex64"?2:1,o=t[0],l=t.length;if(l===0){if(n==="complex64"){let m=Ju(e);return[Zu(m[0],0,n)]}return n==="bool"?[r5(e[0])]:[e[0].toString()]}if(l===1){if(o>n5){let A=Ku*i,y=Array.from(e.slice(0,A)),g=Array.from(e.slice((o-Ku)*i,o*i));return n==="complex64"&&(y=Ju(y),g=Ju(g)),["["+y.map((b,x)=>Zu(b,a[x],n)).join(", ")+", ..., "+g.map((b,x)=>Zu(b,a[o-Ku+x],n)).join(", ")+"]"]}let m=n==="complex64"?Ju(e):Array.from(e);return["["+m.map((A,y)=>Zu(A,a[y],n)).join(", ")+"]"]}let c=t.slice(1),u=r.slice(1),h=r[0]*i,d=[];if(o>n5){for(let m=0;m<Ku;m++){let A=m*h,y=A+h;d.push(...Ld(e.slice(A,y),c,n,u,a,!1))}d.push("...");for(let m=o-Ku;m<o;m++){let A=m*h,y=A+h;d.push(...Ld(e.slice(A,y),c,n,u,a,m===o-1))}}else for(let m=0;m<o;m++){let A=m*h,y=A+h;d.push(...Ld(e.slice(A,y),c,n,u,a,m===o-1))}let p=l===2?",":"";d[0]="["+d[0]+p;for(let m=1;m<d.length-1;m++)d[m]=" "+d[m]+p;let f=`,
|
|
`;for(let m=2;m<l;m++)f+=`
|
|
`;return d[d.length-1]=" "+d[d.length-1]+"]"+(s?"":f),d}function Ju(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var Mt=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=Dt(e),n!=null){let r=n.length;F(r===this.size,()=>`Length of values '${r}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||q0(t,this.size),this.strides=el(e)}set(e,...t){t.length===0&&(t=[0]),F(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let r of e){if(r<0||r>=this.shape[t]){let a=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(a)}t++}let n=e[e.length-1];for(let r=0;r<e.length-1;++r)n+=this.strides[r]*e[r];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return $r().makeTensor(this.values,this.shape,this.dtype)}},$r=null,rl=null,f9=null;function m9(e){$r=e}function A9(e){rl=e}function y9(e){f9=e}var et=class{constructor(e,t,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=Dt(e),this.strides=el(e),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return rl.buffer(this.shape,this.dtype,e)}bufferSync(){return rl.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return tl(this.shape,e)}arraySync(){return tl(this.shape,this.dataSync())}async data(){this.throwIfDisposed();let e=$r().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>Pd(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataSync(){this.throwIfDisposed();let e=$r().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Pd(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await $r().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||($r().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return rl.print(this,e)}clone(){return this.throwIfDisposed(),rl.clone(this)}toString(e=!1){let t=this.dataSync();return p9(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),rl.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),$r().makeVariable(this,e,t,n)}};Object.defineProperty(et,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Z(){return km("Tensor",()=>et)}Z();var _u=class extends et{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r);this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!ea(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);$r().disposeTensor(this),this.dataId=e.dataId,$r().incRef(this,null)}dispose(){$r().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(_u,Symbol.hasInstance,{value:e=>e instanceof et&&e.assign!=null&&e.assign instanceof Function});var hr={};ze(hr,{assertTypesMatch:()=>a5,getTensorsInContainer:()=>Sm,isTensorInList:()=>g9,makeTypesMatch:()=>vt});var Ef;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Ef||(Ef={}));var Tm;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Tm||(Tm={}));var Em;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(Em||(Em={}));var Cm;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Cm||(Cm={}));var Rm;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Rm||(Rm={}));var x9={float32:Cm,int32:Tm,bool:Em,complex64:Rm};function Jn(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return x9[e][t]}function Xh(e){return Jn(e,"int32")}function vt(e,t){if(e.dtype===t.dtype)return[e,t];let n=Jn(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function a5(e,t){F(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function g9(e,t){return t.some(n=>n.id===e.id)}function Sm(e){let t=[],n=new Set;return s5(e,t,n),t}function s5(e,t,n){if(e==null)return;if(e instanceof et){t.push(e);return}if(!w9(e))return;let r=e;for(let a in r){let s=r[a];n.has(s)||(n.add(s),s5(s,t,n))}}function w9(e){return Array.isArray(e)||typeof e=="object"}function Fm(e){return e.kernelName!=null}var i5=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},Yu=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new i5}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry))if(e in this.registryFactory){let{asyncInit:t}=this.initializeBackend(e);if(t)return null}else return null;return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(console.warn(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(this.registryFactory[e]==null)throw new Error(`Backend name '${e}' not found in registry`);if(this.backendName=e,this.registry[e]==null){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new u9(this.backendInstance),!0}setupRegisteredKernels(){wu(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){wu(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof nu)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,a=n.then(s=>r<this.pendingBackendInitId?!1:(this.registry[e]=s,this.pendingBackendInit=null,!0)).catch(s=>(r<this.pendingBackendInitId||(this.pendingBackendInit=null,console.warn(`Initialization of backend ${e} failed`),console.warn(s.stack||s.message)),!1));return this.pendingBackendInit=a,{success:a,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return console.warn(`Initialization of backend ${e} failed`),console.warn(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:r,asyncInit:a}=this.initializeBackend(n);if(a||r)return{name:n,asyncInit:a}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),r=n.backend,a=this.readSync(t),s=r.refCount(t);r.disposeData(t,!0),n.backend=e,e.move(t,a,n.shape,n.dtype,s),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let r;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(r),()=>(r=t(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(e,t,n){e();try{let r=n();return t(),r}catch(r){throw t(),r}}nextTensorId(){return Yu.nextTensorId++}nextVariableId(){return Yu.nextVariableId++}clone(e){let t=D.runKernel(ds,{x:e}),n={x:e},r=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return D.runKernel(Qa,o,l)}}),a=[];return this.addTapeNode(this.state.activeScope.name,n,[t],r,a,{}),t}runKernel(e,t,n){if(qh(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),a=0;n.forEach(o=>{a+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-t-a-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],r=this.isTapeOn(),a=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=Fm(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Fm(e)){let{kernelName:p,inputs:f,attrs:m}=e;this.backendName==null&&this.backend;let A=qh(p,this.backendName);F(A!=null,()=>`Cannot find registered kernel '${p}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=A.kernelFunc({inputs:f,attrs:m,backend:this.backend});let g=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,y,g);let b=g.map(x=>{if(x.rank!=null)return x;let{dataId:w,shape:_,dtype:N}=x;return this.makeTensorFromDataId(w,_,N)});if(r){let x=this.getTensorsForGradient(p,f,b);n=this.saveTensorsForBackwardMode(x)}return b}}else{let{forwardFunc:p}=e,f=m=>{!r||(n=m.map(A=>this.keep(this.clone(A))))};i=()=>{let m=this.backend.numDataIds();o=this.tidy(()=>p(this.backend,f));let A=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,m,A),A}}let{inputs:c,attrs:u}=e,h=Fm(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(d=this.profiler.profileKernel(l,c,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),r&&this.addTapeNode(l,c,t,h,n,u),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-a,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(c).map(p=>c[p]!=null?c[p].shape:null),outputShapes:t.map(p=>p.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let r=Tf(e);if(r!=null){let a=r.inputsToSave||[],s=r.outputsToSave||[],i;r.saveAllInputs?(F(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=a.map(l=>t[l]);let o=n.filter((l,c)=>s[c]);return i.concat(o)}return[]}makeTensor(e,t,n,r){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let a=e;n==="string"&&ka(e[0])&&(a=e.map(o=>Xu(o)));let s=r.write(a,t,n),i=new et(t,n,s,this.nextTensorId());if(this.trackTensor(i,r),n==="string"){let o=this.state.tensorInfo.get(s),l=Z0(a);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,r){n=n||"float32";let a=new et(t,n,e,this.nextTensorId());return this.trackTensor(a,r),a}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==e.dtype&&(e=e.cast(r));let a=new _u(e,t,n,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*xm(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof _u||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*xm(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,r,a,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:a},o=Tf(e);o!=null&&(r=o.gradFunc),r!=null&&(i.gradient=l=>(l=l.map((c,u)=>{if(c==null){let h=n[u],d=Od(h.size,h.dtype);return this.makeTensor(d,h.shape,h.dtype)}return c}),r(l.length>1?l:l[0],a,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Sm(e),n=new Set(t.map(a=>a.id));for(let a=0;a<this.state.activeScope.track.length;a++){let s=this.state.activeScope.track[a];!s.kept&&!n.has(s.id)&&s.dispose()}let r=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(a=>{!a.kept&&a.scopeId===r.id&&this.track(a)})}gradients(e,t,n,r=!1){if(F(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let a=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));F(a instanceof et,()=>"The result y returned by f() must be a tensor.");let s=c9(this.state.activeTape,t,a);if(!r&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[a.id]=n==null?_9(a.shape):n,h9(i,s,l=>this.tidy(l),b9);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let c of l.saved)c.dispose()}),this.state.activeTape=null),{value:a,grads:o}})}customGrad(e){return F(Ia(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{F(t.every(i=>i instanceof et),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};t.forEach((i,o)=>{r[o]=i});let a=(i,o)=>(n=e(...t,o),F(n.value instanceof et,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),F(Ia(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),s=(i,o)=>{let l=n.gradFunc(i,o),c=Array.isArray(l)?l:[l];F(c.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),F(c.every(h=>h instanceof et),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let u={};return c.forEach((h,d)=>{u[d]=()=>h}),u};return this.runKernelFunc({forwardFunc:a,backwardsFunc:s,inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}async time(e){let t=qu(),n=await this.backend.time(e);return n.wallMs=qu()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new i5;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Yu.nextTensorId=0;Yu.nextVariableId=0;function _9(e){let t=wm(Dt(e),"float32");return D.makeTensor(t,e,"float32")}function o5(){let e=t5();if(e._tfengine==null){let t=new P2(e);e._tfengine=new Yu(t)}return n9(e._tfengine.ENV),m9(()=>e._tfengine),e._tfengine}var D=o5();function b9(e,t){let n={a:e,b:t};return D.runKernel(fa,n)}var Kh={};ze(Kh,{isBrowser:()=>l5,isMobile:()=>v9});function k9(){return typeof navigator!="undefined"&&navigator!=null}function v9(){if(k9()){let e=navigator.userAgent||navigator.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4))}return!1}function l5(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Dr=Q();Dr.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Dr.registerFlag("IS_BROWSER",()=>l5());Dr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Dr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Dr.registerFlag("PROD",()=>!1);Dr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Dr.getBool("DEBUG"));Dr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Dr.registerFlag("IS_TEST",()=>!1);Dr.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);function Or(e,t){let n=e;if(tn(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||tn(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&Q().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&u5(e,r,[]),r}function u5(e,t,n){if(n=n||[],!Array.isArray(e)&&!tn(e)){F(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}F(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),F(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let r=t.slice(1);for(let a=0;a<e.length;++a)u5(e[a],r,n.concat(a))}function c5(e,t,n,r){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${r}' must be ${e} tensor, but got ${t} tensor`)}}function R(e,t,n,r="numeric"){if(e instanceof et)return c5(r,e.dtype,t,n),e;let a=$d(e);if(a!=="string"&&["bool","int32","float32"].indexOf(r)>=0&&(a=r),c5(r,a,t,n),e==null||!tn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=Or(e,a);!tn(e)&&!Array.isArray(e)&&(e=[e]);let i=a!=="string"?zd(e,a):Zs(e,[],!0);return D.makeTensor(i,s,a)}function Qu(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((a,s)=>R(a,`${t}[${s}]`,n,r))}var V2="__op";function O(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+V2;let a=(...s)=>{D.startScope(n);try{let i=r(...s);return bm(i)&&console.error("Cannot return a Promise inside of tidy."),D.endScope(i),i}catch(i){throw D.endScope(null),i}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}function I9(e,t){let n=R(e,"real","complex"),r=R(t,"imag","complex");en(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let a={real:n,imag:r};return D.runKernel(_h,a)}var ga=O({complex_:I9});function Na(e,t,n,r){if(r==null&&(r=$d(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!tn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){_m(t);let a=Dt(t),s=Dt(n);F(a===s,()=>`Based on the provided shape, [${t}], the tensor should have ${a} values but has ${s}`);for(let i=0;i<n.length;++i){let o=n[i],l=i===n.length-1?o!==Dt(t.slice(i)):!0;F(n[i]===t[i]||!l,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!tn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?zd(e,r):Zs(e,[],!0),D.makeTensor(e,t,r)}function dr(e,t,n){let r=Or(e,n);return Na(e,t,r,n)}var Mm={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Wd=4;async function S9(e,t){let n=[],r=[],a=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i<a.length;++i){let o=a[i],l=Array.isArray(e)?e[i].tensor:e[o];if(l.dtype!=="float32"&&l.dtype!=="int32"&&l.dtype!=="bool"&&l.dtype!=="string"&&l.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${o}': ${l.dtype}`);let c={name:o,shape:l.shape,dtype:l.dtype};if(l.dtype==="string"){let u=new Promise(async h=>{let d=await l.bytes(),p=d.reduce((A,y)=>A+y.length,0)+Wd*d.length,f=new Uint8Array(p),m=0;for(let A=0;A<d.length;A++){let y=d[A],g=new Uint8Array(new Uint32Array([y.length]).buffer);f.set(g,m),m+=Wd,f.set(y,m),m+=y.length}h(f)});r.push(u)}else r.push(l.data());t!=null&&(c.group=t),n.push(c)}let s=await Promise.all(r);return{data:N9(s),specs:n}}function h5(e,t){let n={},r,a=0;for(let s of t){let i=s.name,o=s.dtype,l=s.shape,c=Dt(l),u;if("quantization"in s){let h=s.quantization;if(h.dtype==="uint8"||h.dtype==="uint16"){if(!("min"in h&&"scale"in h))throw new Error(`Weight ${s.name} with quantization ${h.dtype} doesn't have corresponding metadata min and scale.`)}else if(h.dtype==="float16"){if(o!=="float32")throw new Error(`Weight ${s.name} is quantized with ${h.dtype} which only supports weights of type float32 not ${o}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${h.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let d=Mm[h.dtype],p=e.slice(a,a+c*d),f=h.dtype==="uint8"?new Uint8Array(p):new Uint16Array(p);if(o==="float32")if(h.dtype==="uint8"||h.dtype==="uint16"){u=new Float32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];u[m]=A*h.scale+h.min}}else if(h.dtype==="float16")r===void 0&&(r=T9()),u=r(f);else throw new Error(`Unsupported quantization type ${h.dtype} for weight type float32.`);else if(o==="int32"){if(h.dtype!=="uint8"&&h.dtype!=="uint16")throw new Error(`Unsupported quantization type ${h.dtype} for weight type int32.`);u=new Int32Array(f.length);for(let m=0;m<f.length;m++){let A=f[m];u[m]=Math.round(A*h.scale+h.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=c*d}else if(o==="string"){let h=Dt(s.shape);u=[];for(let d=0;d<h;d++){let p=new Uint32Array(e.slice(a,a+Wd))[0];a+=Wd;let f=new Uint8Array(e.slice(a,a+p));u.push(f),a+=p}}else{let h=Mm[o],d=e.slice(a,a+c*h);if(o==="float32")u=new Float32Array(d);else if(o==="int32")u=new Int32Array(d);else if(o==="bool")u=new Uint8Array(d);else if(o==="complex64"){u=new Float32Array(d);let p=new Float32Array(u.length/2),f=new Float32Array(u.length/2);for(let y=0;y<p.length;y++)p[y]=u[y*2],f[y]=u[y*2+1];let m=dr(p,l,"float32"),A=dr(f,l,"float32");n[i]=ga(m,A),m.dispose(),A.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);a+=c*h}o!=="complex64"&&(n[i]=dr(u,l,o))}return n}function N9(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(s=>{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let r=new Uint8Array(t),a=0;return n.forEach(s=>{r.set(new Uint8Array(s.buffer),a),a+=s.byteLength}),r.buffer}var $m=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function d5(e){return $m?Buffer.byteLength(e):new Blob([e]).size}function E9(e){if($m)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,a=t.length;r<a;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function C9(e){if($m){let r=Buffer.from(e,"base64");return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;++r)n.set([t.charCodeAt(r)],r);return n.buffer}function Dm(e){if(e.length===1)return e[0];let t=0;e.forEach(a=>{t+=a.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(a=>{n.set(new Uint8Array(a),r),r+=a.byteLength}),n.buffer}function p5(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function ec(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:d5(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:d5(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function R9(){let e=n=>{let r=n<<13,a=0;for(;(r&8388608)==0;)a-=8388608,r<<=1;return r&=~8388608,a+=947912704,r|a},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function F9(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function M9(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function T9(){let e=R9(),t=F9(),n=M9();return r=>{let a=new ArrayBuffer(4*r.length),s=new Uint32Array(a);for(let i=0;i<r.length;i++){let o=r[i],l=e[n[o>>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(a)}}var Nt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Nt.instance==null&&(Nt.instance=new Nt),Nt.instance}static registerSaveRouter(e){Nt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Nt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Nt.getHandlers(e,"save")}static getLoadHandlers(e,t){return Nt.getHandlers(e,"load",t)}static getHandlers(e,t,n){let r=[];return(t==="load"?Nt.getInstance().loadRouters:Nt.getInstance().saveRouters).forEach(a=>{let s=a(e,n);s!==null&&r.push(s)}),r}},$9=e=>Nt.registerSaveRouter(e),D9=e=>Nt.registerLoadRouter(e),O9=e=>Nt.getSaveHandlers(e),z9=(e,t)=>Nt.getLoadHandlers(e,t),Om="tensorflowjs",zm=1,Js="models_store",Sa="model_info_store";function f5(){if(!Q().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Pm(e){let t=e.result;t.createObjectStore(Js,{keyPath:"modelPath"}),t.createObjectStore(Sa,{keyPath:"modelPath"})}var Ys=class{constructor(e){if(this.indexedDB=f5(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,r)=>{let a=this.indexedDB.open(Om,zm);a.onupgradeneeded=()=>Pm(a),a.onsuccess=()=>{let s=a.result;if(t==null){let i=s.transaction(Js,"readonly"),o=i.objectStore(Js).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),r(o.error)),i.oncomplete=()=>s.close()}else{let i=ec(t),o=s.transaction(Sa,"readwrite"),l=o.objectStore(Sa),c=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),u;c.onsuccess=()=>{u=s.transaction(Js,"readwrite");let h=u.objectStore(Js).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});h.onsuccess=()=>n({modelArtifactsInfo:i}),h.onerror=d=>{l=o.objectStore(Sa);let p=l.delete(this.modelPath);p.onsuccess=()=>(s.close(),r(h.error)),p.onerror=f=>(s.close(),r(h.error))}},c.onerror=h=>(s.close(),r(c.error)),o.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}}},a.onerror=s=>r(a.error)})}};Ys.URL_SCHEME="indexeddb://";var m5=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Ys.URL_SCHEME)?P9(e.slice(Ys.URL_SCHEME.length)):null;Nt.registerSaveRouter(m5);Nt.registerLoadRouter(m5);function P9(e){return new Ys(e)}function L9(e){return e.startsWith(Ys.URL_SCHEME)?e.slice(Ys.URL_SCHEME.length):e}var W9=class{constructor(){this.indexedDB=f5()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Om,zm);n.onupgradeneeded=()=>Pm(n),n.onsuccess=()=>{let r=n.result,a=r.transaction(Sa,"readonly"),s=a.objectStore(Sa).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(r.close(),t(s.error)),a.oncomplete=()=>r.close()},n.onerror=r=>t(n.error)})}async removeModel(e){return e=L9(e),new Promise((t,n)=>{let r=this.indexedDB.open(Om,zm);r.onupgradeneeded=()=>Pm(r),r.onsuccess=()=>{let a=r.result,s=a.transaction(Sa,"readwrite"),i=s.objectStore(Sa),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return a.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=i.delete(e),u=()=>{l=a.transaction(Js,"readwrite");let h=l.objectStore(Js).delete(e);h.onsuccess=()=>t(o.result.modelArtifactsInfo),h.onerror=d=>n(o.error)};c.onsuccess=u,c.onerror=h=>(u(),a.close(),n(o.error))}},o.onerror=c=>(a.close(),n(o.error)),s.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}},r.onerror=a=>n(r.error)})}},ta="/",al="tensorflowjs_models",A5="info",B9="model_topology",V9="weight_specs",U9="weight_data",H9="model_metadata";function y5(e){return{info:[al,e,A5].join(ta),topology:[al,e,B9].join(ta),weightSpecs:[al,e,V9].join(ta),weightData:[al,e,U9].join(ta),modelMetadata:[al,e,H9].join(ta)}}function j9(e){let t=e.split(ta);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(ta)}function G9(e){return e.startsWith(Qs.URL_SCHEME)?e.slice(Qs.URL_SCHEME.length):e}var Qs=class{constructor(e){if(!Q().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=y5(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=ec(e);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,E9(e.weightData));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:r}}catch(a){throw this.LS.removeItem(this.keys.info),this.LS.removeItem(this.keys.topology),this.LS.removeItem(this.keys.weightSpecs),this.LS.removeItem(this.keys.weightData),this.LS.removeItem(this.keys.modelMetadata),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${r.modelTopologyBytes}, weightSpecsBytes=${r.weightSpecsBytes}, weightDataBytes=${r.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let r=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(r==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=r;let a=this.LS.getItem(this.keys.modelMetadata);if(a!=null){let i=JSON.parse(a);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=C9(s),t}};Qs.URL_SCHEME="localstorage://";var g5=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Qs.URL_SCHEME)?q9(e.slice(Qs.URL_SCHEME.length)):null;Nt.registerSaveRouter(g5);Nt.registerLoadRouter(g5);function q9(e){return new Qs(e)}var X9=class{constructor(){F(Q().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),F(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=al+ta,n=ta+A5;for(let r=0;r<this.LS.length;++r){let a=this.LS.key(r);if(a.startsWith(t)&&a.endsWith(n)){let s=j9(a);e[s]=JSON.parse(this.LS.getItem(a))}}return e}async removeModel(e){e=G9(e);let t=y5(e);if(this.LS.getItem(t.info)==null)throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return this.LS.removeItem(t.info),this.LS.removeItem(t.topology),this.LS.removeItem(t.weightSpecs),this.LS.removeItem(t.weightData),n}},sl="://",Wn=class{constructor(){this.managers={}}static getInstance(){return Wn.instance==null&&(Wn.instance=new Wn),Wn.instance}static registerManager(e,t){F(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(sl)&&(e=e.slice(0,e.indexOf(sl))),F(e.length>0,()=>"scheme must not be an empty string.");let n=Wn.getInstance();F(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function Bd(e){if(e.indexOf(sl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Wn.getSchemes().join(",")}`);return{scheme:e.split(sl)[0],path:e.split(sl)[1]}}async function x5(e,t,n=!1){F(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=Nt.getLoadHandlers(e);F(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),F(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let a=r[0],s=Nt.getSaveHandlers(t);F(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),F(s.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let i=s[0],o=Bd(e).scheme,l=Bd(e).path,c=o===Bd(e).scheme,u=await a.load();n&&c&&await Wn.getManager(o).removeModel(l);let h=await i.save(u);return n&&!c&&await Wn.getManager(o).removeModel(l),h.modelArtifactsInfo}async function K9(){let e=Wn.getSchemes(),t={};for(let n of e){let r=await Wn.getManager(n).listModels();for(let a in r){let s=n+sl+a;t[s]=r[a]}}return t}async function Z9(e){let t=Bd(e);return Wn.getManager(t.scheme).removeModel(t.path)}async function J9(e,t){return x5(e,t,!1)}async function Y9(e,t){return x5(e,t,!0)}var Q9=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(Q().get("IS_BROWSER")){Q().setPlatform("browser",new Q9);try{Wn.registerManager(Qs.URL_SCHEME,new X9)}catch(e){}try{Wn.registerManager(Ys.URL_SCHEME,new W9)}catch(e){}}var eI={importFetch:()=>nk()},Lm,tI=class{constructor(){this.util=require("util"),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return Q().global.fetch!=null?Q().global.fetch(e,t):(Lm==null&&(Lm=eI.importFetch()),Lm(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};Q().get("IS_NODE")&&Q().setPlatform("node",new tI);function We(e,t="float32",n){return t=t||"float32",_m(e),new Mt(e,t,n)}function nI(e,t){let n=R(e,"x","cast");if(!K0(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let r={x:n},a={dtype:t};return D.runKernel(Qa,r,a)}var ye=O({cast_:nI});function rI(e){let t={x:R(e,"x","clone","string_or_numeric")};return D.runKernel(ds,t)}var Nr=O({clone_:rI});function U2(e,t=!1){console.log(e.toString(t))}o5();var aI={buffer:We,cast:ye,clone:Nr,print:U2};A9(aI);var dn={};ze(dn,{browserFiles:()=>sI,browserHTTPRequest:()=>oI,concatenateArrayBuffers:()=>Dm,copyModel:()=>J9,decodeWeights:()=>h5,encodeWeights:()=>S9,fromMemory:()=>lI,getLoadHandlers:()=>z9,getModelArtifactsInfoForJSON:()=>ec,getSaveHandlers:()=>O9,http:()=>Bm,isHTTPScheme:()=>Wm,listModels:()=>K9,loadWeights:()=>iI,moveModel:()=>Y9,registerLoadRouter:()=>D9,registerSaveRouter:()=>$9,removeModel:()=>Z9,weightsLoaderFactory:()=>w5,withSaveHandler:()=>uI});var cI="model",hI=".json",dI=".weights.bin";function _5(e){return new Promise(t=>setTimeout(t)).then(e)}var il=class{constructor(e){if(!Q().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(il.URL_SCHEME)&&(e=e.slice(il.URL_SCHEME.length)),(e==null||e.length===0)&&(e=cI),this.modelTopologyFileName=e+hI,this.weightDataFileName=e+dI}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer);let a=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),s=this.jsonAnchor==null?document.createElement("a"):this.jsonAnchor;if(s.download=this.modelTopologyFileName,s.href=a,await _5(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await _5(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:ec(e)}}}};il.URL_SCHEME="downloads://";var pI=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.files=e}async load(){let e=this.files[0],t=this.files.slice(1);return new Promise((n,r)=>{let a=new FileReader;a.onload=s=>{let i=JSON.parse(s.target.result),o=i.modelTopology;if(o==null){r(new Error(`modelTopology field is missing from file ${e.name}`));return}t.length===0&&n({modelTopology:o});let l=i.weightsManifest;if(l==null){r(new Error(`weightManifest field is missing from file ${e.name}`));return}let c;try{c=this.checkManifestAndWeightFiles(l,t)}catch(p){r(p);return}let u=[],h=[],d=[];l.forEach(p=>{p.paths.forEach(f=>{h.push(f),d.push(null)}),u.push(...p.weights)}),l.forEach(p=>{p.paths.forEach(f=>{let m=new FileReader;m.onload=A=>{let y=A.target.result,g=h.indexOf(f);if(d[g]=y,d.indexOf(null)===-1){let b={modelTopology:o,weightSpecs:u,weightData:Dm(d),format:i.format,generatedBy:i.generatedBy,convertedBy:i.convertedBy};i.signature!=null&&(b.signature=i.signature),i.userDefinedMetadata!=null&&(b.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(b.modelInitializer=i.modelInitializer),n(b)}},m.onerror=A=>r(`Failed to weights data from file of path '${f}'.`),m.readAsArrayBuffer(c[f])})})},a.onerror=s=>r(`Failed to read model topology and weights manifest JSON from file '${e.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(e)})}checkManifestAndWeightFiles(e,t){let n=[],r=t.map(s=>p5(s.name)),a={};for(let s of e)s.paths.forEach(i=>{let o=p5(i);if(n.indexOf(o)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${o}'`);if(n.push(o),r.indexOf(o)===-1)throw new Error(`Weight file with basename '${o}' is not provided.`);a[i]=t[r.indexOf(o)]});if(n.length!==t.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${t.length}).`);return a}},mI=e=>Q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(il.URL_SCHEME)?fI(e.slice(il.URL_SCHEME.length)):null;Nt.registerSaveRouter(mI);function fI(e="model"){return new il(e)}function sI(e){return new pI(e)}function b5(e,t,n,r){i(e),n=n==null?0:n,r=r==null?1:r,o(n,r);let a=0,s=l=>(l.then(c=>{let u=n+ ++a/e.length*(r-n);return t(u),c}),l);function i(l){F(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,c){F(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),F(c>=0&&c<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${c}`),F(c>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${c}`)}return Promise.all(e.map(s))}async function v5(e,t){t==null&&(t={});let n=t.fetchFunc==null?Q().platform.fetch:t.fetchFunc,r=e.map(c=>n(c,t.requestInit,{isBinary:!0})),a=0,s=.5,i=(t.onProgress==null?await Promise.all(r):await b5(r,t.onProgress,a,s)).map(c=>c.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await b5(i,t.onProgress,o,l)}async function iI(e,t="",n,r){return w5(a=>v5(a,{requestInit:r}))(e,t,n)}function w5(e){return async(t,n="",r)=>{let a=t.map(()=>!1),s={},i=r!=null?r.map(()=>!1):[],o=[];if(t.forEach((p,f)=>{let m=0;p.weights.forEach(A=>{let y="quantization"in A?A.quantization.dtype:A.dtype,g=Mm[y]*Dt(A.shape),b=()=>{a[f]=!0,s[f]==null&&(s[f]=[]),s[f].push({manifestEntry:A,groupOffset:m,sizeBytes:g})};r!=null?r.forEach((x,w)=>{x===A.name&&(b(),i[w]=!0)}):b(),o.push(A.name),m+=g})}),!i.every(p=>p)){let p=r.filter((f,m)=>!i[m]);throw new Error(`Could not find weights in manifest with names: ${p.join(", ")}.
|
|
Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=a.reduce((p,f,m)=>(f&&p.push(m),p),[]),c=[];l.forEach(p=>{t[p].paths.forEach(f=>{let m=n+(n.endsWith("/")?"":"/")+f;c.push(m)})});let u=await e(c),h={},d=0;return l.forEach(p=>{let f=t[p].paths.length,m=0;for(let b=0;b<f;b++)m+=u[d+b].byteLength;let A=new ArrayBuffer(m),y=new Uint8Array(A),g=0;for(let b=0;b<f;b++){let x=new Uint8Array(u[d+b]);y.set(x,g),g+=x.byteLength}s[p].forEach(b=>{let x=A.slice(b.groupOffset,b.groupOffset+b.sizeBytes),w=h5(x,[b.manifestEntry]);for(let _ in w)h[_]=w[_]}),d+=f}),h}}var AI="application/octet-stream",yI="application/json",Vm=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(F(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=Q().platform.fetch,F(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&F(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer),t.body.append("model.json",new Blob([JSON.stringify(r)],{type:yI}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:AI}),"model.weights.bin");let a=await this.fetch(this.path,t);if(a.ok)return{modelArtifactsInfo:ec(e),responses:[a]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${a.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(p){let f=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?f+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":f+=" Please make sure the server is serving valid JSON for this request.",new Error(f)}let n=t.modelTopology,r=t.weightsManifest,a=t.generatedBy,s=t.convertedBy,i=t.format,o=t.signature,l=t.userDefinedMetadata;if(n==null&&r==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);let c,u;r!=null&&([c,u]=await this.loadWeights(r));let h={modelTopology:n,weightSpecs:c,weightData:u,generatedBy:a,convertedBy:s,format:i};o!=null&&(h.signature=o),l!=null&&(h.userDefinedMetadata=l);let d=t.modelInitializer;return d&&(h.modelInitializer=d),h}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=gI(t),a=this.weightPathPrefix||n,s=[];for(let c of e)s.push(...c.weights);let i=[],o=[];for(let c of e)for(let u of c.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(u)):i.push(a+u+r);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await v5(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,Dm(l)]}};Vm.URL_SCHEME_REGEX=/^https?:\/\//;function gI(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),a=n>t?e.substring(n):"";return[r+"/",a]}function Wm(e){return e.match(Vm.URL_SCHEME_REGEX)!=null}var k5=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>Wm(r)):n=Wm(e),n)return Bm(e,t)}return null};Nt.registerSaveRouter(k5);Nt.registerLoadRouter(k5);function Bm(e,t){return new Vm(e,t)}function oI(e,t){return Bm(e,t)}var Um=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},xI=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function lI(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new Um(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Um({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new Um({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function uI(e){return new xI(e)}var H2={};ze(H2,{confusionMatrix:()=>wI});function _I(e,t,n=!1,r=!1){let a=R(e,"a","matMul"),s=R(t,"b","matMul");[a,s]=vt(a,s);let i={a,b:s},o={transposeA:n,transposeB:r};return D.runKernel(Ya,i,o)}var qe=O({matMul_:_I});function bI(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let a={indices:R(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:r};return D.runKernel(bs,a,s)}var Wo=O({oneHot_:bI});function vI(e,t){let n=R(e,"x","transpose");if(t==null&&(t=n.shape.map((s,i)=>i).reverse()),F(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(s=>{F(s>=0&&s<n.rank,()=>`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let r={x:n},a={perm:t};return D.runKernel(Ws,r,a)}var at=O({transpose_:vI});function kI(e,t,n){let r=R(e,"labels","confusionMatrix"),a=R(t,"predictions","confusionMatrix");F(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),F(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),F(a.rank===1,()=>`Expected the rank of predictions to be 1, but got ${a.rank}`),F(r.shape[0]===a.shape[0],()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${a.shape[0]}. Labels and predictions should have the same number of elements.`),F(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=Wo(ye(r,"int32"),n),i=Wo(ye(a,"int32"),n),o=at(s),l=qe(o,i);return ye(l,"int32")}var wI=O({confusionMatrix_:kI}),bu={};ze(bu,{fromPixels:()=>NI,toPixels:()=>II});function Cf(e,t,n){if(Ks(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=Or(e,n);if(r.length!==3&&r.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Na(e,t,r,n)}var ol;function SI(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,r=!1,a=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)r=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)a=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(a){let d=2;if(a&&e.readyState<d)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.")}if(qh(Gh,D.backendName)!=null){let d={pixels:e},p={numChannels:t};return D.runKernel(Gh,d,p)}let[l,c]=a?[e.videoWidth,e.videoHeight]:[e.width,e.height],u;i?u=e.getContext("2d").getImageData(0,0,l,c).data:r||n?u=e.data:(s||a||o)&&(ol==null&&(ol=document.createElement("canvas").getContext("2d")),ol.canvas.width=l,ol.canvas.height=c,ol.drawImage(e,0,0,l,c),u=ol.getImageData(0,0,l,c).data);let h;if(t===4)h=new Int32Array(u);else{let d=l*c;h=new Int32Array(d*t);for(let p=0;p<d;p++)for(let f=0;f<t;++f)h[p*t+f]=u[p*4+f]}return Cf(h,[c,l,t],"int32")}async function II(e,t){let n=R(e,"img","toPixels");if(!(e instanceof et)){let c=n;n=ye(c,"int32"),c.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[r,a]=n.shape.slice(0,2),s=n.rank===2?1:n.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let i=await n.data(),o=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(a*r*4);for(let c=0;c<r*a;++c){let u=[0,0,0,255];for(let d=0;d<s;d++){let p=i[c*s+d];if(n.dtype==="float32"){if(p<0||p>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${p}.`)}else if(n.dtype==="int32"&&(p<0||p>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${p}.`);s===1?(u[0]=p*o,u[1]=p*o,u[2]=p*o):u[d]=p*o}let h=c*4;l[h+0]=Math.round(u[0]),l[h+1]=Math.round(u[1]),l[h+2]=Math.round(u[2]),l[h+3]=Math.round(u[3])}if(t!=null){t.width=a,t.height=r;let c=t.getContext("2d"),u=new ImageData(l,a,r);c.putImageData(u,0,0)}return n!==e&&n.dispose(),l}var NI=O({fromPixels_:SI}),Rf={};ze(Rf,{prepareAndValidate:()=>I5});function I5(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(Dt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let a=t.shape,s=a[a.length-1],i=1;for(let h=0;h<a.length-1;++h)i*=a[h];let o=e.shape,l=a.slice();l.pop();let c=1;for(let h=s;h<n;++h)c*=o[h],l.push(o[h]);let u=[...el(e.shape).map(h=>h/c),1].slice(0,s);return[l,i,c,u]}var Ff={};ze(Ff,{calculateShapes:()=>N5,validateInput:()=>jm,validateUpdateShape:()=>Hm});function Hm(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,a=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${a}.`;if(n.rank<a)throw new Error(s+` update.rank < ${a}. `);if(e.length<r+(n.rank-a))throw new Error(s+` Output shape length < ${r+(n.rank-a)}`);if(n.rank!==a+e.length-r)throw new Error(s+` update.rank != ${a+e.length-r}`);for(let i=0;i<a;++i)if(n.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${n.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<n.rank-a;++i)if(n.shape[i+a]!==e[i+r])throw new Error(s+` updates.shape[${i+a}] (${n.shape[i+a]}) != shape[${i+a}] (${e[i+a]})`)}function jm(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(n.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(e.size===0)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}Hm(n,t,e)}function N5(e,t,n){let r=t.shape.length,a=r>1?t.shape[r-1]:1,s=n.length,i=1;for(let h=a;h<s;++h)i*=n[h];let o=a<1?1:a,l=Dt(t.shape)/o,c=[...el(n.slice(0,a)),1],u=Dt(n);return{sliceRank:a,numUpdates:l,sliceSize:i,strides:c,outputSize:u}}var rn={};ze(rn,{assertParamsValid:()=>TI,computeFlatOffset:()=>CI,computeOutShape:()=>S5,getNormalizedAxes:()=>E5,isSliceContinous:()=>EI,maskToAxes:()=>Vd,parseSliceParams:()=>D5,sliceInfo:()=>RI,startForAxis:()=>M5,startIndicesWithElidedDims:()=>C5,stopForAxis:()=>$5,stopIndicesWithElidedDims:()=>R5,stridesForAxis:()=>F5,stridesWithElidedDims:()=>T5});function TI(e,t,n){let r=e.shape.length;F(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),F(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let a=0;a<r;++a)F(t[a]+n[a]<=e.shape[a],()=>`Error in slice${r}D: begin[${a}] + size[${a}] (${t[a]+n[a]}) would overflow input.shape[${a}] (${e.shape[a]})`)}function Vd(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function S5(e,t,n){let r=[];for(let a=0;a<e.length;a++)r[a]=Math.ceil((t[a]-e[a])/n[a]);return r}function T5(e,t,n,r){let a=[...e];for(let s=a.length;s<r.length;s++)a.push(1);for(let s=0;s<n;s++)s===0?a[t]=1:(a.splice(t,0,1),a.pop());return a}function O5(e,t,n){return n<=e?n:n-(t-1)}function z5(e,t){let n=[];for(let r=0;r<e;r++)n.push(t+r);return n}function E5(e,t,n,r,a,s,i,o,l){let c=e.length,u=new Array(c),h=new Array(c),d=new Array(c);if(t.length&&n>0){let p=t[0],f=n+1;u=C5(i,p,f,r,e),h=R5(o,p,f,a,e),d=T5(s,p,f,e)}else for(let p=0;p<c;p++)u[p]=M5(i,r,s,e,p,l),h[p]=$5(o,a,s,e,p,l),d[p]=F5(s,p,l);return{begin:u,end:h,strides:d}}function C5(e,t,n,r,a){let s=[...a],i=z5(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=0;else{let l=O5(t,n,o),c=r[l];e&1<<l&&(c=0),s[o]=c}return s}function R5(e,t,n,r,a){let s=[...a],i=z5(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=O5(t,n,o),c=r[l];e&1<<l&&(c=Number.MAX_SAFE_INTEGER),s[o]=c}for(let o=0;o<s.length;o++){let l=a[o];s[o]<0&&(s[o]+=l),s[o]=Hu(0,s[o],a[o])}return s}function F5(e,t,n){let r=e[t];return(n&1<<t||r==null)&&(r=1),r}function M5(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),i=Hu(0,i,l-1),i}function $5(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||i==null)&&(o>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),o>0?i=Hu(0,i,l):i=Hu(-1,i,l-1),i}function EI(e,t,n){let r=n.length;for(let a=0;a<n.length;a++)if(n[a]>1){r=a;break}for(let a=r+1;a<n.length;a++)if(t[a]>0||n[a]!==e[a])return!1;return!0}function CI(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r<e.length-1;r++)n+=e[r]*t[r];return n}function D5(e,t,n){let r,a=e.shape.length;typeof t=="number"?r=[t,...new Array(a-1).fill(0)]:t.length<a?r=t.concat(new Array(a-t.length).fill(0)):r=t.slice(),r.forEach(i=>{F(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return n==null?s=new Array(a).fill(-1):typeof n=="number"?s=[n,...new Array(a-1).fill(-1)]:n.length<a?s=n.concat(new Array(a-n.length).fill(-1)):s=n,s=s.map((i,o)=>i>=0?i:(F(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-r[o])),[r,s]}function RI(e,t,n,r,a,s,i,o,l){let c=t.slice(),u=n.slice(),h=r;r==null&&(h=new Array(c.length));let d=Vd(i);if(d.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(i!==0&&o!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(i!==0&&l!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let p=e.length-c.length,f=Vd(o),m=e.slice();f.forEach(_=>{c[_]=0,u[_]=1,m.splice(_,0,1)});let{begin:A,end:y,strides:g}=E5(m,d,p,c,u,h,a,s,i);c=A,u=y,h=g;let b=Vd(l);b.forEach(_=>{u[_]=c[_]+1,h[_]=1});let x=S5(c,u,h),w=x.filter((_,N)=>b.indexOf(N)===-1);return{nonStrided:h.every(_=>_===1),$begin:c,$end:u,$strides:h,size:x,newShape:m,outShape:w}}var re={};ze(re,{Serializable:()=>P5,SerializationMap:()=>ei,registerClass:()=>Ta});var P5=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},ei=class{constructor(){this.classNameMap={}}static getMap(){return ei.instance==null&&(ei.instance=new ei),ei.instance}static register(e){ei.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Ta(e){F(e.className!=null,()=>"Class being registered does not have the static className property defined."),F(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),F(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),ei.register(e)}var j2={};ze(j2,{TEST_EPSILON_FLOAT16:()=>L5,encodeStrings:()=>W5,expectArrayBuffersEqual:()=>zI,expectArraysClose:()=>FI,expectArraysEqual:()=>$I,expectNumbersClose:()=>DI,expectPromiseToFail:()=>MI,expectValuesInRange:()=>OI,testEpsilon:()=>Gm});var PI=.001,L5=.1;function FI(e,t,n){return n==null&&(n=Gm()),qm(e,t,(r,a)=>Xm(r,a,n))}function Gm(){return D.backend.floatPrecision()===32?PI:L5}function qm(e,t,n){let r=!0;if((tn(e)||tn(t))&&(r=!1),tn(e)&&tn(t)&&(r=!0),r){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=Or(e),o=Or(t);if(!ea(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let a=tn(e)?e:Zs(e),s=tn(t)?t:Zs(t);if(a.length!==s.length)throw new Error(`Arrays have different lengths actual: ${a.length} vs expected: ${s.length}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`);for(let i=0;i<s.length;++i){let o=a[i],l=s[i];if(!n(o,l))throw new Error(`Arrays differ: actual[${i}] = ${o}, expected[${i}] = ${l}.
|
|
Actual: ${a}.
|
|
Expected: ${s}.`)}}function MI(e,t){e().then(()=>t.fail(),()=>t())}function $I(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return ka(e)||ka(e[0])||ka(t)||ka(t[0])?qm(e,n,(r,a)=>r==a):qm(e,t,(r,a)=>Xm(r,a,0))}function DI(e,t,n){if(n==null&&(n=Gm()),!Xm(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function Xm(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function OI(e,t,n){for(let r=0;r<e.length;r++)if(e[r]<t||e[r]>n)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function zI(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t))}function W5(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?W5(n):e[t]=Xu(n)}return e}var J4="3.1.0";function Y4(){Q().set("PROD",!0)}function Q4(){Q().set("DEBUG",!0)}function e8(){Q().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Mf(e){Q().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}y9(Mf);function t8(){D.disposeVariables()}function Sr(){return D}function Zh(){return D.memory()}function Bo(e){return D.profile(e)}function U(e,t){return D.tidy(e,t)}function Fe(e){Sm(e).forEach(t=>t.dispose())}function Bt(e){return D.keep(e)}function n8(e){return D.time(e)}function r8(e){return D.setBackend(e)}function a8(){return D.ready()}function s8(){return D.backendName}function i8(e){D.removeBackend(e)}function G2(e){return D.findBackend(e)}function o8(e){return D.findBackendFactory(e)}function vu(e,t,n=1){return D.registerBackend(e,t,n)}function q2(){return D.backend}function l8(e,t){Q().setPlatform(e,t)}function LI(e,t){let n=R(e,"a","add"),r=R(t,"b","add");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(fa,a)}var oe=O({add_:LI});function WI(e,t){let n=R(e,"a","floorDiv"),r=R(t,"b","floorDiv");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(us,a)}var Jh=O({floorDiv_:WI});function BI(e,t){let n=R(e,"a","div"),r=R(t,"b","div");if([n,r]=vt(n,r),n.dtype==="int32"&&r.dtype==="int32")return Jh(n,r);let a={a:n,b:r},s={};return D.runKernel(is,a,s)}var Ne=O({div_:BI});function VI(e,t){let n=R(e,"a","mul"),r=R(t,"b","mul");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(_s,a)}var L=O({mul_:VI});function UI(e){let t=R(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return D.runKernel(iu,n)}else{let n={x:t};return D.runKernel(Li,n)}}var $t=O({abs_:UI});function HI(e){let t={x:R(e,"x","acos")};return D.runKernel(Wi,t)}var $f=O({acos_:HI});function jI(e){let t={x:R(e,"x","acosh")};return D.runKernel(Bi,t)}var Df=O({acosh_:jI});function GI(e){F(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),F(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((a,s)=>R(a,`tensors${s}`,"addN")),n=t[0];t.forEach(a=>{if(a.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(a=>{if(!ea(a.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return D.runKernel(Ka,r)}var Yh=O({addN_:GI});function qI(e,t=null,n=!1){let r={x:R(e,"x","all","bool")},a={axis:t,keepDims:n};return D.runKernel(Ah,r,a)}var Qh=O({all_:qI});function XI(e,t=null,n=!1){let r={x:R(e,"x","any","bool")},a={axis:t,keepDims:n};return D.runKernel(yh,r,a)}var ku=O({any_:XI});function KI(e,t=0){let n={x:R(e,"x","argMax")},r={axis:t};return D.runKernel(Za,n,r)}var Iu=O({argMax_:KI});function ZI(e,t=0){let n={x:R(e,"x","argMin")},r={axis:t};return D.runKernel(ru,n,r)}var Of=O({argMin_:ZI});function JI(e){let t={x:R(e,"x","asin")};return D.runKernel(Vi,t)}var zf=O({asin_:JI});function YI(e){let t={x:R(e,"x","asinh")};return D.runKernel(Ui,t)}var Pf=O({asinh_:YI});function QI(e){let t={x:R(e,"x","atan")};return D.runKernel(Hi,t)}var Lf=O({atan_:QI});function eN(e,t){let n=R(e,"a","atan2"),r=R(t,"b","atan2");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(Gi,a)}var Wf=O({atan2_:eN});function tN(e){let t={x:R(e,"x","atanh")};return D.runKernel(ji,t)}var Bf=O({atanh_:tN});function nN(e,t,n,r,a="NHWC",s){let i=e[3],o=[...t,i],l=B5(a);return tc(e,o,n,s,r,null,null,l)}function V5(e,t,n,r,a,s,i="channelsLast"){let[o,l]=Ud(t),c;if(i==="channelsLast")c=[o,l,e[3],e[3]];else if(i==="channelsFirst")c=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return tc(e,c,n,r,a,s,!1,i)}function rN(e,t,n,r,a,s,i="NDHWC"){let[o,l,c]=Km(t),u,h;if(i==="NDHWC")h="channelsLast",u=[o,l,c,e[4],e[4]];else if(i==="NCDHW")h="channelsFirst",u=[o,l,c,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return U5(e,u,n,r,a,!1,h,s)}function tc(e,t,n,r,a,s,i=!1,o="channelsLast"){let[l,c,u,h]=[-1,-1,-1,-1];if(o==="channelsLast")[l,c,u,h]=e;else if(o==="channelsFirst")[l,h,c,u]=e;else throw new Error(`Unknown dataFormat ${o}`);let[d,p,,f]=t,[m,A]=Ud(n),[y,g]=Ud(r),b=ll(d,y),x=ll(p,g),{padInfo:w,outHeight:_,outWidth:N}=aN(a,c,u,m,A,b,x,s,o),T=i?f*h:f,E;return o==="channelsFirst"?E=[l,T,_,N]:o==="channelsLast"&&(E=[l,_,N,T]),{batchSize:l,dataFormat:o,inHeight:c,inWidth:u,inChannels:h,outHeight:_,outWidth:N,outChannels:T,padInfo:w,strideHeight:m,strideWidth:A,filterHeight:d,filterWidth:p,effectiveFilterHeight:b,effectiveFilterWidth:x,dilationHeight:y,dilationWidth:g,inShape:e,outShape:E,filterShape:t}}function U5(e,t,n,r,a,s=!1,i="channelsLast",o){let[l,c,u,h,d]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,c,u,h,d]=e;else if(i==="channelsFirst")[l,d,c,u,h]=e;else throw new Error(`Unknown dataFormat ${i}`);let[p,f,m,,A]=t,[y,g,b]=Km(n),[x,w,_]=Km(r),N=ll(p,x),T=ll(f,w),E=ll(m,_),{padInfo:M,outDepth:z,outHeight:P,outWidth:B}=sN(a,c,u,h,y,g,b,N,T,E,o),G=s?A*d:A,V;return i==="channelsFirst"?V=[l,G,z,P,B]:i==="channelsLast"&&(V=[l,z,P,B,G]),{batchSize:l,dataFormat:i,inDepth:c,inHeight:u,inWidth:h,inChannels:d,outDepth:z,outHeight:P,outWidth:B,outChannels:G,padInfo:M,strideDepth:y,strideHeight:g,strideWidth:b,filterDepth:p,filterHeight:f,filterWidth:m,effectiveFilterDepth:N,effectiveFilterHeight:T,effectiveFilterWidth:E,dilationDepth:x,dilationHeight:w,dilationWidth:_,inShape:e,outShape:V,filterShape:t}}function iN(e,t,n,r,a){r==null&&(r=Zm(e,t,n));let s=e[0],i=e[1],o=ti((s-t+2*r)/n+1,a),l=ti((i-t+2*r)/n+1,a);return[o,l]}function oN(e,t,n,r,a,s){a==null&&(a=Zm(e,t,r));let i=e[0],o=e[1],l=e[2],c=ti((i-t+2*a)/r+1,s),u=ti((o-t+2*a)/r+1,s),h=ti((l-t+2*a)/r+1,s);return[c,u,h,n]}function Zm(e,t,n,r=1){let a=ll(t,r);return Math.floor((e[0]*(n-1)-n+a)/2)}function Ud(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function Km(e){return typeof e=="number"?[e,e,e]:e}function ll(e,t){return t<=1?e:e+(e-1)*(t-1)}function aN(e,t,n,r,a,s,i,o,l){let c,u,h;if(typeof e=="number"){c={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let d=iN([t,n],s,r,e,o);u=d[0],h=d[1]}else if(e==="same"){u=Math.ceil(t/r),h=Math.ceil(n/a);let d=Math.max(0,(u-1)*r+s-t),p=Math.max(0,(h-1)*a+i-n),f=Math.floor(d/2),m=d-f,A=Math.floor(p/2),y=p-A;c={top:f,bottom:m,left:A,right:y,type:"SAME"}}else if(e==="valid")c={top:0,bottom:0,left:0,right:0,type:"VALID"},u=Math.ceil((t-s+1)/r),h=Math.ceil((n-i+1)/a);else if(typeof e=="object"){let d=l==="channelsLast"?e[1][0]:e[2][0],p=l==="channelsLast"?e[1][1]:e[2][1],f=l==="channelsLast"?e[2][0]:e[3][0],m=l==="channelsLast"?e[2][1]:e[3][1];c={top:d,bottom:p,left:f,right:m,type:d===0&&p===0&&f===0&&m===0?"VALID":"EXPLICIT"},u=ti((t-s+d+p)/r+1,o),h=ti((n-i+f+m)/a+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outHeight:u,outWidth:h}}function sN(e,t,n,r,a,s,i,o,l,c,u){let h,d,p,f;if(typeof e=="number"){h={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=oN([t,n,r,1],o,1,a,e,u);d=m[0],p=m[1],f=m[2]}else if(e==="same"){d=Math.ceil(t/a),p=Math.ceil(n/s),f=Math.ceil(r/i);let m=(d-1)*a+o-t,A=(p-1)*s+l-n,y=(f-1)*i+c-r,g=Math.floor(m/2),b=m-g,x=Math.floor(A/2),w=A-x,_=Math.floor(y/2),N=y-_;h={top:x,bottom:w,left:_,right:N,front:g,back:b,type:"SAME"}}else if(e==="valid")h={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-o+1)/a),p=Math.ceil((n-l+1)/s),f=Math.ceil((r-c+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:h,outDepth:d,outHeight:p,outWidth:f}}function ti(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function Ea(e){let[t,n,r]=Ud(e);return t===1&&n===1&&r===1}function zr(e,t){return Ea(e)||Ea(t)}function B5(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function lN(e,t){let n={x:R(e,"x","reshape","string_or_numeric")},r={shape:t};return D.runKernel(ko,n,r)}var q=O({reshape_:lN});function uN(e,t,n,r,a){let s=R(e,"x","avgPool","float32"),i=1;F(zr(n,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=q(s,[1,s.shape[0],s.shape[1],s.shape[2]])),F(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),a!=null&&F(Ut(r),()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=D.runKernel(Ja,c,u);return h=ye(h,s.dtype),l?q(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Nu=O({avgPool_:uN});function cN(e,t,n,r,a,s="NDHWC"){let i=R(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=q(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),F(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),a!=null&&F(Ut(r),()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},h=D.runKernel(au,c,u);return h=ye(h,o.dtype),l?q(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var Vf=O({avgPool3d_:cN});function hN(e,t=0){F(e.length>=1,()=>"Pass at least one tensor to concat");let n=Qu(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype ${s.dtype}. `)}),n.length===1)return Nr(n[0]);let r=n,a={axis:t};return D.runKernel(qi,r,a)}var ct=O({concat_:hN});function dN(e){let t={x:R(e,"x","sigmoid")};return D.runKernel(Ms,t)}var Yn=O({sigmoid_:dN});function pN(e,t,n){let r=R(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let a={x:r},s={begin:t,size:n};return D.runKernel(To,a,s)}var Me=O({slice_:pN});function fN(e){let t={x:R(e,"x","tanh")};return D.runKernel(Ls,t)}var Vo=O({tanh_:fN});function mN(e,t,n,r,a,s){let i=R(e,"forgetBias","basicLSTMCell"),o=R(t,"lstmKernel","basicLSTMCell"),l=R(n,"lstmBias","basicLSTMCell"),c=R(r,"data","basicLSTMCell"),u=R(a,"c","basicLSTMCell"),h=R(s,"h","basicLSTMCell"),d=ct([c,h],1),p=qe(d,o),f=oe(p,l),m=f.shape[0],A=f.shape[1]/4,y=[m,A],g=Me(f,[0,0],y),b=Me(f,[0,A],y),x=Me(f,[0,A*2],y),w=Me(f,[0,A*3],y),_=oe(L(Yn(g),Vo(b)),L(u,Yn(oe(i,x)))),N=L(Vo(_),Yn(w));return[_,N]}var u8=O({basicLSTMCell_:mN});function AN(e,t,n){let r=R(e,"x","batchToSpaceND"),a=t.reduce((o,l)=>o*l);F(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),F(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),F(r.shape[0]%a==0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${a}`);let s={x:r},i={blockShape:t,crops:n};return D.runKernel(su,s,i)}var Su=O({batchToSpaceND_:AN});function yN(e){let t;return e.rank===0||e.rank===1?t=q(e,[1,1,1,e.size]):e.rank===2?t=q(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=q(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function gN(e,t,n,r,a,s){s==null&&(s=.001);let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;r!=null&&(u=R(r,"offset","batchNorm")),F(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),F(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),F(c==null||o.rank===c.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let h={x:yN(i),scale:c,offset:u,mean:o,variance:l},d={varianceEpsilon:s},p=D.runKernel(cs,h,d);return q(p,i.shape)}var Hs=O({batchNorm_:gN});function xN(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),F(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),F(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),F(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),c!=null&&F(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${c.rank}.`),u!=null&&F(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var X2=O({batchNorm2d_:xN});function wN(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),F(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),F(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),F(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),c!=null&&F(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${c.rank}.`),u!=null&&F(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var K2=O({batchNorm3d_:wN});function _N(e,t,n,r,a,s){let i=R(e,"x","batchNorm"),o=R(t,"mean","batchNorm"),l=R(n,"variance","batchNorm"),c;a!=null&&(c=R(a,"scale","batchNorm"));let u;return r!=null&&(u=R(r,"offset","batchNorm")),F(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),F(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),F(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),c!=null&&F(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${c.rank}.`),u!=null&&F(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${u.rank}.`),Hs(i,o,l,u,c,s)}var Z2=O({batchNorm4d_:_N});function bN(e,t,n){let r=R(e,"x","bincount"),a=R(t,"weights","bincount");F(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),F(n>=0,()=>`size must be non-negative, but got ${n}.`),F(a.size===r.size||a.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${a.shape}.`);let s={x:r,weights:a},i={size:n};return D.runKernel(wh,s,i)}var J2=O({bincount_:bN});function vN(e,t){let n=R(e,"broadcastTo","x"),r=n.shape;if(t.some(l=>!(l>0)||l%1!=0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let l=n.shape.slice();for(;l.length<t.length;)l.unshift(1);n=q(n,l)}let a=n.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(a[l]===t[l])s[l]=1;else if(n.shape[l]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(s.map((l,c)=>l>1?c:-1).filter(l=>l>=0).length===0)return Nr(n);let i={x:n},o={reps:s};return D.runKernel(Aa,i,o)}var Tu=O({broadcastTo_:vN});function kN(e){let t={x:R(e,"x","ceil")};return D.runKernel(es,t)}var Uf=O({ceil_:kN});function IN(e,t,n){let r=R(e,"x","clipByValue");F(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let a={x:r},s={clipValueMin:t,clipValueMax:n};return D.runKernel(ma,a,s)}var pn=O({clipByValue_:IN});function NN(e){return ct(e,0)}var Y2=O({concat1d_:NN});function SN(e,t){return ct(e,t)}var ed=O({concat2d_:SN});function TN(e,t){return ct(e,t)}var Q2=O({concat3d_:TN});function EN(e,t){return ct(e,t)}var e0=O({concat4d_:EN});function CN(e,t,n,r,a="NHWC",s=[1,1],i){let o=R(e,"x","conv2d"),l=R(t,"filter","conv2d"),c=o,u=!1;o.rank===3&&(u=!0,c=q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(c.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${c.rank}.`),F(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),i!=null&&F(Ut(r),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h=a==="NHWC"?c.shape[3]:c.shape[1];F(h===l.shape[2],()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${l.shape[2]}.`),F(zr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let d={x:c,filter:l},p={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},f=D.runKernel(ts,d,p);return u?q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Kr=O({conv2d_:CN});function RN(e,t,n,r,a="NWC",s=1,i){let o=R(e,"x","conv1d"),l=R(t,"filter","conv1d"),c=o,u=!1;o.rank===2&&(u=!0,c=q(o,[1,o.shape[0],o.shape[1]])),F(c.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${c.rank}.`),F(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),i!=null&&F(Ut(r),()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),F(c.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${c.shape[2]}) must match input depth for filter ${l.shape[1]}.`),F(zr(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),F(a==="NWC",()=>`Error in conv1d: got dataFormat of ${a} but only NWC is currently supported.`);let h=q(l,[1,l.shape[0],l.shape[1],l.shape[2]]),d=q(c,[c.shape[0],1,c.shape[1],c.shape[2]]),p=Kr(d,h,[1,n],r,"NHWC",[1,s],i);return u?q(p,[p.shape[2],p.shape[3]]):q(p,[p.shape[0],p.shape[2],p.shape[3]])}var td=O({conv1d_:RN});function FN(e,t,n,r,a,s="NHWC",i){F(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,c=!1;t.rank===3&&(c=!0,l=q(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),F(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),F(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),F(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let u=s==="NHWC"?o[3]:o[1],h=s==="NHWC"?l.shape[3]:l.shape[1];F(u===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${u}) must match input depth for filter ${n.shape[2]}.`),F(h===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${h}) must match output depth for filter ${n.shape[3]}.`),i!=null&&F(Ut(a),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let d={dy:l,filter:n},p={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,inputShape:o},f=D.runKernel(ns,d,p);return c?q(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Jm=O({conv2DBackpropInput_:FN});function MN(e,t,n,r,a,s){let i=R(e,"x","conv2dTranspose"),o=R(t,"filter","conv2dTranspose");return Jm(n,i,o,r,a,"NHWC",s)}var nd=O({conv2dTranspose_:MN});function $N(e,t,n,r,a="NDHWC",s=[1,1,1]){let i=R(e,"x","conv3d"),o=R(t,"filter","conv3d"),l=i,c=!1;i.rank===4&&(c=!0,l=q(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),F(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),F(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),F(zr(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),F(a==="NDHWC",()=>`Error in conv3d: got dataFormat of ${a} but only NDHWC is currently supported.`);let u={x:l,filter:o},h={strides:n,pad:r,dataFormat:a,dilations:s},d=D.runKernel(ou,u,h);return c?q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Hf=O({conv3d_:$N});function DN(e,t,n,r,a){F(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=q(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],c=i.shape[4];F(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),F(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),F(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),F(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),F(c===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${c}) must match output depth for filter ${n.shape[4]}.`);let u={dy:i,filter:n},h={pad:a,strides:r,inputShape:s},d=D.runKernel(kh,u,h);return o?q(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var H5=O({conv3DBackpropInput_:DN});function ON(e,t,n,r,a){let s=R(e,"x","conv3dTranspose"),i=R(t,"filter","conv3dTranspose");return H5(n,s,i,r,a)}var c8=O({conv3dTranspose_:ON});function zN(e){let t={x:R(e,"x","cos")};return D.runKernel(rs,t)}var Eu=O({cos_:zN});function PN(e){let t={x:R(e,"x","cosh")};return D.runKernel(Xi,t)}var rd=O({cosh_:PN});function LN(e,t=0,n=!1,r=!1){let a={x:R(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:r};return D.runKernel(as,a,s)}var ad=O({cumsum_:LN});function WN(e,t,n,r=!1){let a=R(e,"x","denseBincount"),s=R(t,"weights","denseBincount");F(a.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${a.dtype}`),F(a.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${a.rank}.`),F(n>=0,()=>`size must be non-negative, but got ${n}.`),F(s.size===a.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${a.shape}, weights shape: ${s.shape}.`);let i={x:a,weights:s},o={size:n,binaryOutput:r};return D.runKernel(Ih,i,o)}var t0=O({denseBincount_:WN});function BN(e,t,n="NHWC"){let r=R(e,"x","depthToSpace"),a=n==="NHWC"?r.shape[1]:r.shape[2],s=n==="NHWC"?r.shape[2]:r.shape[3],i=n==="NHWC"?r.shape[3]:r.shape[1];F(a*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${a} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),F(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),F(i%(t*t)==0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${r.shape}`);let o={x:r},l={blockSize:t,dataFormat:n};return D.runKernel(Zi,o,l)}var jf=O({depthToSpace_:BN});function VN(e,t,n,r,a="NHWC",s=[1,1],i){let o=R(e,"x","depthwiseConv2d"),l=R(t,"filter","depthwiseConv2d"),c=o,u=!1;o.rank===3&&(u=!0,c=q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),F(c.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${c.rank}.`),F(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),F(c.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),i!=null&&F(Ut(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`);let h={x:c,filter:l},d={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},p=D.runKernel(ss,h,d);return u?q(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Uo=O({depthwiseConv2d_:VN});function UN(e){let t={x:R(e,"x","diag")};return D.runKernel(Th,t)}var h8=O({diag_:UN});function HN(e,t,n,r,a=[1,1],s="NHWC"){let i=R(e,"x","dilation2d"),o=R(t,"filter","dilation2d");F(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),F(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),F(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,c=!1;i.rank===3&&(l=q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),c=!0);let u={x:l,filter:o},h={strides:n,pad:r,dilations:a},d=D.runKernel(lu,u,h);return c?q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Gf=O({dilation2d_:HN});function jN(e,t){let n=e.length,r=[];for(let a=0;a<n;a++){let s=n-1-a,i=e[s]||1;(t[t.length-1-a]||1)>1&&i===1&&r.unshift(s)}return r}function Ot(e,t){let n=[];for(let r=0;r<t.length;r++){let a=e[e.length-r-1],s=t.length-r-1,i=t[s];(a==null||a===1&&i>1)&&n.unshift(s)}return n}function At(e,t){let n=[],r=Math.max(e.length,t.length);for(let a=0;a<r;a++){let s=e[e.length-a-1];s==null&&(s=1);let i=t[t.length-a-1];if(i==null&&(i=1),s===1)n.unshift(i);else if(i===1)n.unshift(s);else if(s!==i){let o=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(o)}else n.unshift(s)}return n}function GN(e,t){let n=R(e,"a","equal"),r=R(t,"b","equal");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(Qi,a)}var xa=O({equal_:GN});function qN(e,t,n){let r=R(t,"a","where"),a=R(n,"b","where"),s=R(e,"condition","where","bool"),i=At(r.shape,a.shape),o=Tu(r,i),l=Tu(a,i);s.rank===1&&F(s.shape[0]===r.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),s.rank!==1&&en(s.shape,l.shape,"Error in where: ");let c={condition:s,t:o,e:l};return D.runKernel(No,c)}var fn=O({where_:qN});function XN(e){let t={x:R(e,"x","zerosLike")};return D.runKernel(zo,t)}var He=O({zerosLike_:XN});function KN(e,t){let n=R(e,"a","div"),r=R(t,"b","div");[n,r]=vt(n,r);let a=Ne(n,r),s=He(a),i=xa(r,s);return fn(i,s,a)}var qf=O({divNoNan_:KN});function ZN(e,t){let n=R(e,"t1","dot"),r=R(t,"t2","dot");F((n.rank===1||n.rank===2)&&(r.rank===1||r.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let a=n.rank===1?n.size:n.shape[1],s=r.rank===1?r.size:r.shape[0];if(F(a===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${a} and ${s}.`),n.rank===1&&r.rank===1){let i=q(n,[1,-1]),o=q(r,[-1,1]),l=qe(i,o);return q(l,[])}else if(n.rank===1&&r.rank===2){let i=q(n,[1,-1]),o=q(r,[r.shape[0],r.shape[1]]),l=qe(i,o);return q(l,[l.size])}else if(n.rank===2&&r.rank===1){let i=q(r,[-1,1]),o=qe(n,i);return q(o,[o.size])}else{let i=q(r,[r.shape[0],r.shape[1]]);return qe(n,i)}}var n0=O({dot_:ZN});function JN(e){let t={x:R(e,"x","elu")};return D.runKernel(Ji,t)}var Ho=O({elu_:JN});function YN(e){let t=R(e,"x","erf");F(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=ye(t,"float32"));let n={x:t};return D.runKernel(Yi,n)}var Xf=O({erf_:YN});function QN(e){let t={x:R(e,"x","exp")};return D.runKernel(os,t)}var Pn=O({exp_:QN});function eS(e,t=0){let n=R(e,"x","expandDims","string_or_numeric");F(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},a={dim:t};return D.runKernel(eo,r,a)}var vn=O({expandDims_:eS});function tS(e){let t={x:R(e,"x","expm1")};return D.runKernel(to,t)}var Kf=O({expm1_:tS});function nS(e,t){let n=R(e,"x","tile","string_or_numeric");F(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},a={reps:t};return D.runKernel(Aa,r,a)}var wa=O({tile_:nS});function rS(e,t,n,r="float32"){t==null&&(t=e);let a=We([e,t],r),s=e<=t?e:t;for(let o=0;o<s;++o)a.set(1,o,o);let i=q(a.toTensor(),[e,t]);if(n==null)return i;if(n.length===1)return wa(vn(i,0),[n[0],1,1]);if(n.length===2)return wa(vn(vn(i,0),0),[n[0],n[1],1,1]);if(n.length===3)return wa(vn(vn(vn(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var Zf=O({eye_:rS});function Cu(e,t,n){let r={shape:e,value:t,dtype:n};return D.runKernel(uu,{},r)}function aS(e){let t={x:R(e,"x","floor")};return D.runKernel(ls,t)}var jo=O({floor_:aS});function sS(e,t,n=0,r=0){let a=R(e,"x","gather"),s=R(t,"indices","gather","int32"),i={x:a,indices:s},o={axis:n,batchDims:r};return D.runKernel(ro,i,o)}var js=O({gather_:sS});function iS(e,t){let n=R(e,"a","greater"),r=R(t,"b","greater");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(so,a)}var Qn=O({greater_:iS});function oS(e,t){let n=R(e,"a","greaterEqual"),r=R(t,"b","greaterEqual");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(hs,a)}var _a=O({greaterEqual_:oS});function lS(e){let t={input:R(e,"input","imag")};return D.runKernel($h,t)}var sd=O({imag_:lS});function uS(e){let t={x:R(e,"x","isFinite")};return D.runKernel(io,t)}var r0=O({isFinite_:uS});function cS(e){let t={x:R(e,"x","isInf")};return D.runKernel(oo,t)}var a0=O({isInf_:cS});function hS(e){let t={x:R(e,"x","isNaN")};return D.runKernel(lo,t)}var s0=O({isNaN_:hS});function dS(e,t=.2){let n={x:R(e,"x","leakyRelu")},r={alpha:t};return D.runKernel(ps,n,r)}var Ru=O({leakyRelu_:dS});function pS(e,t){let n=R(e,"a","less"),r=R(t,"b","less");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(uo,a)}var id=O({less_:pS});function fS(e,t){let n=R(e,"a","lessEqual"),r=R(t,"b","lessEqual");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(co,a)}var Gs=O({lessEqual_:fS});function i0(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let r={start:e,stop:t,num:n};return D.runKernel(Dh,{},r)}function mS(e,t=5,n=1,r=1,a=.5){let s=R(e,"x","localResponseNormalization");F(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${s.rank}.`),F(Ut(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=q(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},c={depthRadius:t,bias:n,alpha:r,beta:a},u=D.runKernel(du,l,c);return o?q(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var Jf=O({localResponseNormalization_:mS});function AS(e){let t={x:R(e,"x","log")};return D.runKernel(fs,t)}var kn=O({log_:AS});function yS(e){let t={x:R(e,"x","log1p")};return D.runKernel(ho,t)}var od=O({log1p_:yS});function d8(e){return F(Ia(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let r=R(t,"x","tf.grad","string_or_numeric"),a=n!=null?R(n,"dy","tf.grad"):null;return D.tidy(()=>{let{value:s,grads:i}=D.gradients(()=>e(r),[r],a);return a!=null&&en(s.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Hd(i),i[0]})}}function p8(e){return F(Ia(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{F(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=Qu(t,"args","tf.grads","string_or_numeric"),a=n!=null?R(n,"dy","tf.grads"):null;return D.tidy(()=>{let{value:s,grads:i}=D.gradients(()=>e(...r),r,a);return a!=null&&en(s.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Hd(i),i})}}function f8(e){return F(Ia(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{F(t instanceof et,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),F(n==null||n instanceof et,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:a}=D.gradients(()=>e(t),[t],n);return Hd(r),{grad:r[0],value:a}}}function m8(e){return F(Ia(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{F(Array.isArray(t)&&t.every(a=>a instanceof et),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),F(n==null||n instanceof et,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=D.gradients(()=>e(...t),t,n);return n!=null&&en(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Hd(r.grads),r}}function o0(e,t){F(Ia(e),()=>"The f passed in variableGrads(f) must be a function"),F(t==null||Array.isArray(t)&&t.every(c=>c instanceof _u),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let c in D.registeredVariables)t.push(D.registeredVariables[c])}let r=n?t.filter(c=>!c.trainable):null,a=t.length;t=t.filter(c=>c.trainable),F(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${a} variables is trainable.`);let s=!0,{value:i,grads:o}=D.gradients(e,t,null,s);F(o.some(c=>c!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),F(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((c,u)=>{o[u]!=null&&(l[c.name]=o[u])}),r!=null&&r.forEach(c=>l[c.name]=null),{value:i,grads:l}}function Tr(e){return D.customGrad(e)}function Hd(e){if(e.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that
|
|
the f you passed encloses all operations that lead from x to y.`)}function gS(e){let t={x:R(e,"x","neg")};return D.runKernel(mo,t)}var _t=O({neg_:gS});function xS(e){let t={x:R(e,"x","softplus")};return D.runKernel(Ro,t)}var Go=O({softplus_:xS});function wS(e){let t=R(e,"x","logSigmoid");return Tr(n=>({value:_t(Go(_t(n))),gradFunc:r=>L(r,Yn(_t(n)))}))(t)}var l0=O({logSigmoid_:wS});function _S(e,t=null,n=!1){let r={x:R(e,"x","max")},a={reductionIndices:t,keepDims:n};return D.runKernel(ms,r,a)}var Ln=O({max_:_S});function bS(e,t){let n=R(e,"a","sub"),r=R(t,"b","sub");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(Ps,a)}var we=O({sub_:bS});function vS(e,t=null,n=!1){let r=R(e,"x","sum");r.dtype==="bool"&&(r=ye(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return D.runKernel(Ds,a,s)}var Te=O({sum_:vS});function kS(e,t=-1){let n=R(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return Tr((r,a)=>{let s=!0,i=Ln(r,t,!0),o=we(r,i),l=we(ye(o,"float32"),kn(Te(Pn(o),t,s)));return a([l]),{value:l,gradFunc:(c,u)=>{let[h]=u,d=!0,p=Pn(h);return we(c,L(Te(c,t,d),p))}}})(n)}var ld=O({logSoftmax_:kS});function Ym(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function j5(e,t,n){let r=e.length+t.length,a=[],s=0,i=0;for(let o=0;o<r;o++)n.indexOf(o)===-1?a.push(e[s++]):a.push(t[i++]);return a}function G5(e,t){let n=[],r=e.length;for(let s=0;s<r;s++)t.indexOf(s)===-1&&n.push(e[s]);let a=t.map(s=>e[s]);return[n,a]}function ni(e,t){let n=t.map(r=>1);return j5(e,n,t)}function IS(e,t,n){F(Ym(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function q5(e,t){if(Ym(e,t))return null;let n=[];for(let r=0;r<t;++r)e.indexOf(r)===-1&&n.push(r);return e.forEach(r=>n.push(r)),n}function Qm(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function NS(e,t){let n=[];for(let r=t-e;r<t;++r)n.push(r);return n}function SS(e,t=null,n=!1){let r=R(e,"x","logSumExp"),a=rr(t,r.shape),s=Ln(r,a,!0),i=we(r,s),o=Pn(i),l=Te(o,a),c=kn(l),u=oe(q(s,c.shape),c);if(n){let h=ni(u.shape,a);return q(u,h)}return u}var Yf=O({logSumExp_:SS});function TS(e,t){let n=R(e,"a","logicalAnd","bool"),r=R(t,"b","logicalAnd","bool");At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(po,a)}var er=O({logicalAnd_:TS});function ES(e){let t={x:R(e,"x","logicalNot","bool")};return D.runKernel(cu,t)}var Fu=O({logicalNot_:ES});function CS(e,t){let n=R(e,"a","logicalOr","bool"),r=R(t,"b","logicalOr","bool");At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(hu,a)}var ud=O({logicalOr_:CS});function RS(e,t){let n=R(e,"a","logicalXor","bool"),r=R(t,"b","logicalXor","bool");return At(n.shape,r.shape),er(ud(e,t),Fu(er(e,t)))}var u0=O({logicalXor_:RS});function FS(e,t,n,r,a){let s=R(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=q(s,[1,s.shape[0],s.shape[1],s.shape[2]])),F(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),F(zr(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&F(Ut(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},h=D.runKernel(ys,c,u);return l?q(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Mu=O({maxPool_:FS});function MS(e,t=[1,1,1],n,r,a,s="NDHWC"){let i=R(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=q(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),F(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),F(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),a!=null&&F(Ut(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);let c={x:o},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},h=D.runKernel(pu,c,u);return l?q(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var Qf=O({maxPool3d_:MS});function $S(e,t,n,r,a=!1){let s={x:R(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:a},o=D.runKernel(Lh,s,i);return{result:o[0],indexes:o[1]}}var c0=O({maxPoolWithArgmax_:$S});function DS(e,t){let n=R(e,"a","maximum"),r=R(t,"b","maximum");[n,r]=vt(n,r),n.dtype==="bool"&&(n=ye(n,"int32"),r=ye(r,"int32")),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(As,a)}var Er=O({maximum_:DS});function OS(e,t=null,n=!1){let r={x:R(e,"x","mean")},a={axis:t,keepDims:n};return D.runKernel(gs,r,a)}var bt=O({mean_:OS});function zS(e,t=null,n=!1){let r={x:R(e,"x","min")},a={axis:t,keepDims:n};return D.runKernel(xs,r,a)}var qo=O({min_:zS});function PS(e,t){let n=R(e,"a","minimum"),r=R(t,"b","minimum");[n,r]=vt(n,r),n.dtype==="bool"&&(n=ye(n,"int32"),r=ye(r,"int32")),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(ws,a)}var Xo=O({minimum_:PS});function LS(e,t,n){F(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=R(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");F(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let a=n==="reflect"?1:0;for(let o=0;o<r.rank;o++)F(t[o].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),F(t[o][0]>=0&&t[o][0]<=r.shape[o]-a&&t[o][1]>=0&&t[o][1]<=r.shape[o]-a,()=>`Padding in dimension ${o} cannot be greater than or equal to ${r.shape[o]-a} or less than 0 for input of shape ${r.shape}`);let s={paddings:t,mode:n},i={x:r};return D.runKernel(fu,i,s)}var em=O({mirrorPad_:LS});function WS(e,t){let n=R(e,"a","mod"),r=R(t,"b","mod");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(fo,a)}var tm=O({mod_:WS});function BS(e){let t=R(e,"x","square"),n={};return D.runKernel("Square",{x:t},n)}var ot=O({square_:BS});function VS(e,t=null,n=!1){e=R(e,"x","moments");let r=rr(t,e.shape),a=bt(e,r,n),s=a.shape;n||(s=ni(a.shape,r));let i=ot(we(ye(e,"float32"),q(a,s))),o=bt(i,r,n);return{mean:a,variance:o}}var cd=O({moments_:VS});function US(e,t,n,r){let a=R(t,"data","multiRNNCell"),s=Qu(n,"c","multiRNNCell"),i=Qu(r,"h","multiRNNCell"),o=a,l=[];for(let h=0;h<e.length;h++){let d=e[h](o,s[h],i[h]);l.push(d[0]),l.push(d[1]),o=d[1]}let c=[],u=[];for(let h=0;h<l.length;h+=2)c.push(l[h]),u.push(l[h+1]);return[c,u]}var A8=O({multiRNNCell_:US});function HS(e,t,n,r=!1){let a=R(e,"logits","multinomial"),s=a.size,i=a.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?q(a,[1,-1]):a},l={numSamples:t,seed:n,normalized:r},c=D.runKernel(Wh,o,l);return i===1?q(c,[c.size]):c}var h0=O({multinomial_:HS});function jS(e,t){let n=R(e,"a","notEqual"),r=R(t,"b","notEqual");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r};return D.runKernel(Ao,a)}var qs=O({notEqual_:jS});function Ct(e,t="float32"){if(t==="complex64"){let r=Ct(e,"float32"),a=Ct(e,"float32");return ga(r,a)}let n=Od(Dt(e),t);return D.makeTensor(n,e,t)}function Cr(e,t="float32"){if(t==="complex64"){let r=Cr(e,"float32"),a=Ct(e,"float32");return ga(r,a)}let n=wm(Dt(e),t);return D.makeTensor(n,e,t)}function GS(e){let t={x:R(e,"x","onesLike")};return D.runKernel(wo,t)}var In=O({onesLike_:GS});function qS(e,t){let n=R(e,"v1","outerProduct"),r=R(t,"v2","outerProduct");F(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);let a=q(n,[-1,1]),s=q(r,[1,-1]);return qe(a,s)}var y8=O({outerProduct_:qS});function XS(e,t,n=0){let r=R(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let a={paddings:t,constantValue:n},s={x:r};return D.runKernel(vs,s,a)}var Zr=O({pad_:XS});function KS(e,t,n=0){return F(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),Zr(e,[t],n)}var g8=O({pad1d_:KS});function ZS(e,t,n=0){return F(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Zr(e,t,n)}var x8=O({pad2d_:ZS});function JS(e,t,n=0){return F(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Zr(e,t,n)}var w8=O({pad3d_:JS});function YS(e,t,n=0){return F(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),Zr(e,t,n)}var _8=O({pad4d_:YS});function QS(e,t,n){let r=R(e,"x","spaceToBatchND");F(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),F(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),F(r.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+n[l-1][0]+n[l-1][1])%t[l-1]==0:i,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let a={x:r},s={blockShape:t,paddings:n};return D.runKernel(yu,a,s)}var $u=O({spaceToBatchND_:QS});function nT(e,t,n,r,a,s){a==null&&(a=[1,1]),s==null&&(s=1),r===0&&(r="valid");let i=R(e,"x","maxPool"),o=i,l=!1;i.rank===3&&(l=!0,o=q(i,[1,i.shape[0],i.shape[1],i.shape[2]])),F(zr(s,a),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${a}'`);let c=V5(o.shape,t,s,a,r),u=[c.dilationHeight,c.dilationWidth],h;r==="same"?h=tT([c.filterHeight,c.filterWidth],u):h=[[0,0],[0,0]];let d=u[0]===1&&u[1]===1,[p,f]=eT([c.inHeight,c.inWidth],u,h),m=d?r:"valid",A=d?o:$u(o,u,p),y=(n==="avg"?()=>Nu(A,t,s,m):()=>Mu(A,t,s,m))(),g=d?y:Su(y,u,f);return l?q(g,[g.shape[1],g.shape[2],g.shape[3]]):g}function eT(e,t,n){let r=n.map(u=>u[0]),a=n.map(u=>u[1]),s=e.concat(r,a),i=t.map((u,h)=>(u-s[h]%u)%u),o=a.map((u,h)=>u+i[h]),l=t.map((u,h)=>[r[h],o[h]]),c=t.map((u,h)=>[0,i[h]]);return[l,c]}function tT(e,t){let n=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),r=n.map(s=>Math.floor(s/2)),a=n.map((s,i)=>s-r[i]);return n.map((s,i)=>[r[i],a[i]])}var d0=O({pool_:nT});function rT(e,t){let n=R(e,"base","pow"),r=R(t,"exp","pow");[n,r]=vt(n,r);let a={a:n,b:r};return D.runKernel(ks,a)}var Jr=O({pow_:rT});function aT(e,t){let n=R(e,"x","prelu"),r=R(t,"alpha","prelu"),a={x:n,alpha:r};return D.runKernel(Is,a)}var Du=O({prelu_:aT});function sT(e,t=null,n=!1){let r=R(e,"x","prod");r.dtype==="bool"&&(r=ye(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return D.runKernel(bo,a,s)}var hd=O({prod_:sT});function iT(e,t,n){let r=Dt(e),a=null;if(n==null||n==="float32")a=new Float32Array(r);else if(n==="int32")a=new Int32Array(r);else if(n==="bool")a=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let s=0;s<r;s++)a[s]=t();return D.makeTensor(a,e,n)}var b8=O({rand_:iT}),eA=Qo(ck()),tA=class{constructor(e,t,n,r,a){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=a||Math.random();this.random=eA.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let r=this.nextVal;return this.nextVal=NaN,r}let e,t,n=!1;for(;!n;){let r,a,s;do r=2*this.random()-1,a=2*this.random()-1,s=r*r+a*a;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*r*i,t=this.mean+this.stdDev*a*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},oT=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let a=r||Math.random();this.randu=eA.alea(a.toString()),this.randn=new tA(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,a,s;for(;;){do r=this.randn.nextValue(),s=1+this.c*r;while(s<=0);if(s*=s*s,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),a=this.randu(),a<t||Math.log(a)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},lT=class{constructor(e=0,t=1,n,r){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=eA.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function uT(e,t,n=1,r="float32",a){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let s=new oT(t,n,r,a),i=We(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var v8=O({randomGamma_:uT});function cT(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error(`Unsupported data type ${r}`);let s=new tA(t,n,r,!1,a),i=We(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var p0=O({randomNormal_:cT});function hT(e,t=0,n=1,r="float32",a){let s=We(e,r),i=new lT(t,n,null,a);for(let o=0;o<s.values.length;o++)s.values[o]=i.nextValue();return s.toTensor()}var Ko=O({randomUniform_:hT});function dd(e,t,n=1,r="float32"){if(n===0)throw new Error("Cannot have a step of zero");let a={start:e,stop:t,step:n,dtype:r};return D.runKernel(mu,{},a)}function dT(e){let t={input:R(e,"input","real")};return D.runKernel(Bh,t)}var Ou=O({real_:dT});function pT(e){let t={x:R(e,"x","reciprocal")};return D.runKernel(vo,t)}var nm=O({reciprocal_:pT});function fT(e){let t={x:R(e,"x","relu")};return D.runKernel(Ns,t)}var Rr=O({relu_:fT});function mT(e){let t={x:R(e,"x","relu6")};return D.runKernel(Ts,t)}var pd=O({relu6_:mT});function AT(e,t){let n={x:R(e,"x","reverse")},r={dims:t};return D.runKernel(Es,n,r)}var Nn=O({reverse_:AT});function yT(e){let t=R(e,"x","reverse");return F(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),Nn(t,0)}var k8=O({reverse1d_:yT});function gT(e,t){let n=R(e,"x","reverse");return F(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),Nn(n,t)}var I8=O({reverse2d_:gT});function xT(e,t){let n=R(e,"x","reverse");return F(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),Nn(n,t)}var N8=O({reverse3d_:xT});function wT(e,t){let n=R(e,"x","reverse");return F(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),Nn(n,t)}var S8=O({reverse4d_:wT});function _T(e){let t={x:R(e,"x","round")};return D.runKernel(Cs,t)}var rm=O({round_:_T});function bT(e){let t={x:R(e,"x","rsqrt")};return D.runKernel(Rs,t)}var fd=O({rsqrt_:bT});function Se(e,t){if((tn(e)&&t!=="string"||Array.isArray(e))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&tn(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return Na(e,[],[],t)}function vT(e){let t={x:R(e,"x","selu")};return D.runKernel(So,t)}var md=O({selu_:vT});function kT(e,t,n,r,a,s=[1,1],i="NHWC"){let o=R(e,"x","separableConv2d"),l=R(t,"depthwiseFilter","separableConv2d"),c=R(n,"pointwiseFilter","separableConv2d"),u=o,h=!1;if(o.rank===3&&(h=!0,u=q(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");F(u.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${u.rank}.`),F(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),F(c.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),F(c.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${c.shape[0]}.`),F(c.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${c.shape[1]}.`);let d=l.shape[2],p=l.shape[3];F(c.shape[2]===d*p,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*p}, but got ${c.shape[2]}.`);let f=Uo(u,l,r,a,i,s),m=Kr(f,c,1,"valid",i);return h?q(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var am=O({separableConv2d_:kT});async function IT(e,t){let n=R(e,"x","setdiff1d"),r=R(t,"y","setdiff1d");F(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),F(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),F(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let a=await n.data(),s=await r.data(),i=new Set(s),o=0;for(let u=0;u<a.length;u++)i.has(a[u])||o++;let l=new Mt([o],n.dtype),c=new Mt([o],"int32");for(let u=0,h=0;u<a.length;u++)i.has(a[u])||(l.values[h]=a[u],c.values[h]=u,h++);return[l.toTensor(),c.toTensor()]}var f0=IT;function NT(e){let t={x:R(e,"x","sign")};return D.runKernel(Co,t)}var sm=O({sign_:NT});function ST(e){let t={x:R(e,"x","sin")};return D.runKernel(Fs,t)}var Ad=O({sin_:ST});function TT(e){let t={x:R(e,"x","sinh")};return D.runKernel(Eo,t)}var yd=O({sinh_:TT});function ET(e,t,n){let r=R(e,"x","slice1d");return F(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),Me(r,[t],[n])}var gd=O({slice1d_:ET});function CT(e,t,n){let r=R(e,"x","slice2d");return F(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var im=O({slice2d_:CT});function RT(e,t,n){let r=R(e,"x","slice3d");return F(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var xd=O({slice3d_:RT});function FT(e,t,n){let r=R(e,"x","slice4d");return F(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),Me(r,t,n)}var zu=O({slice4d_:FT});function MT(e,t=-1){let n=R(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let r={logits:n},a={dim:t};return D.runKernel(Os,r,a)}var Pu=O({softmax_:MT});function $T(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return D.runKernel(Fh,t)}var Lu=O({fft_:$T});function DT(e){F(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return D.runKernel(Mh,t)}var Zo=O({ifft_:DT});function OT(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let a=q(e,[n,t]);r=Zo(a)}else{let a=[n,2*(t-1)],s=q(Ou(e),[n,t]),i=q(sd(e),[n,t]),o=Nn(Me(s,[0,1],[n,t-2]),1),l=L(Nn(Me(i,[0,1],[n,t-2]),1),Se(-1)),c=ct([s,o],1),u=ct([i,l],1),h=q(ga(c,u),[a[0],a[1]]);r=Zo(h)}if(r=Ou(r),e.rank===3&&e.shape[0]!==0){let a=r,s=e.shape[0];r=q(r,[s,r.shape[0]/s,r.shape[1]]),a.dispose()}return r}var wd=O({irfft_:OT});function zT(e,t,n=0){let r={x:R(e,"x","split")},a={numOrSizeSplits:t,axis:n};return D.runKernel(Fo,r,a)}var an=O({split_:zT});function PT(e,t){F(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],r=e.size/n,a;if(t!=null&&t<n){let f=e.shape.map(A=>0),m=e.shape.map(A=>A);m[e.shape.length-1]=t,a=Me(e,f,m),n=t}else if(t!=null&&t>n){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-n,a=ct([e,Ct(f)],e.shape.length-1),n=t}else a=e;let s=He(a),i=q(ga(a,s),[r,n]),o=Lu(i),l=Math.floor(n/2)+1,c=Ou(o),u=sd(o),h=an(c,[l,n-l],c.shape.length-1),d=an(u,[l,n-l],u.shape.length-1),p=a.shape.slice();return p[a.shape.length-1]=l,q(ga(h[0],d[0]),p)}var Wu=O({rfft_:PT});function LT(e){let t={x:R(e,"x","sqrt")};return D.runKernel($s,t)}var Xt=O({sqrt_:LT});function WT(e,t){let n=R(e,"a","squaredDifference"),r=R(t,"b","squaredDifference");[n,r]=vt(n,r),At(n.shape,r.shape);let a={a:n,b:r},s={};return D.runKernel(zs,a,s)}var _d=O({squaredDifference_:WT});function BT(e,t){let n=R(e,"x","squeeze");return q(n,j0(n.shape,t).newShape)}var ba=O({squeeze_:BT});function VT(e,t=0){let n=Qu(e,"tensors","stack","string_or_numeric");F(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&F(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,a={axis:t};return D.runKernel(_o,r,a)}var Sn=O({stack_:VT});function UT(e,t=0){let n={x:R(e,"x","step")},r={alpha:t};return D.runKernel(ya,n,r)}var Jo=O({step_:UT});function HT(e,t,n,r,a=0,s=0,i=0,o=0,l=0){let c={x:R(e,"x","stridedSlice")},u={begin:t,end:n,strides:r,beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return D.runKernel(Mo,c,u)}var om=O({stridedSlice_:HT});function jT(e){let t={x:R(e,"x","tan")};return D.runKernel($o,t)}var lm=O({tan_:jT});function Qt(e,t){Ks(e);let n=Or(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Na(e,null,n,t)}function pr(e,t,n){if(Ks(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=Or(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Na(e,t,r,n)}function T8(e,t,n){if(Ks(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=Or(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Na(e,t,r,n)}function E8(e,t,n){if(Ks(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=Or(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Na(e,t,r,n)}function C8(e,t,n){if(Ks(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=Or(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,Na(e,t,r,n)}function GT(e,t=1,n=!0){let r=R(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let a=r.shape[r.shape.length-1];if(t>a)throw new Error(`'k' passed to topk() must be <= the last dimension (${a}) but got ${t}`);let s={x:r},i={k:t,sorted:n},[o,l]=D.runKernel(Do,s,i);return{values:o,indices:l}}var um=O({topk_:GT});function qT(e,t=0,n=1,r,a){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new tA(t,n,r,!0,a),i=We(e,r);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var bd=O({truncatedNormal_:qT});function XT(e,t=0){let n=R(e,"x","unique","string_or_numeric");F(n.rank>0,()=>"The input tensor must be at least 1D");let r={x:n},a={axis:t},[s,i]=D.runKernel(jh,r,a);return{values:s,indices:i}}var vd=O({unique_:XT});function KT(e,t,n){let r=R(e,"x","unsortedSegmentSum"),a=R(t,"segmentIds","unsortedSegmentSum","int32");F(Ut(n),()=>"numSegments must be of dtype int");let s={x:r,segmentIds:a},i={numSegments:n};return D.runKernel(xu,s,i)}var cm=O({unsortedSegmentSum_:KT});function ZT(e,t=0){let n=R(e,"x","unstack","string_or_numeric");F(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},a={axis:t};return D.runKernel(Oo,r,a)}var tr=O({unstack_:ZT});function m0(e,t=!0,n,r){return D.makeVariable(e,t,n,r)}function X5(e,t){let n=[];for(let s=0;s<t.length;s++)t[s]&&n.push(s);let r=We(e,"int32"),a=We([n.length,e.length],"int32");for(let s=0;s<n.length;s++){let i=r.indexToLoc(n[s]),o=s*e.length;a.values.set(i,o)}return a.toTensor()}async function JT(e){let t=R(e,"condition","whereAsync","bool"),n=await t.data(),r=X5(t.shape,n);return e!==t&&t.dispose(),r}var hm=JT;async function YT(e,t,n){let r=R(e,"tensor","boolMask"),a=R(t,"mask","boolMask","bool"),s=n==null?0:n,i=a.rank,o=r.shape;F(i>0,()=>"mask cannot be scalar"),en(o.slice(s,s+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let m=s;m<s+i;m++)l*=o[m];let c=o.slice(0,s).concat([l],o.slice(s+i)),u=q(r,c),h=q(a,[-1]),d=await hm(h),p=ba(d,[1]),f=js(u,p,s);return e!==r&&r.dispose(),t!==a&&a.dispose(),p.dispose(),u.dispose(),h.dispose(),d.dispose(),f}var R8=YT;function QT(e,t="euclidean",n=null,r=!1){e=R(e,"x","norm");let a=K5(e,t,n),s=a.shape;if(r){let i=rr(n,e.shape);s=ni(a.shape,i)}return q(a,s)}function K5(e,t,n=null){if(e.rank===0)return $t(e);if(e.rank!==1&&n===null)return K5(q(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return Te($t(e),n);if(t===Infinity)return Ln($t(e),n);if(t===-Infinity)return qo($t(e),n);if(t==="euclidean"||t===2)return Xt(Te(Jr($t(e),Se(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return Ln(Te($t(e),n[0]),n[1]-1);if(t===Infinity)return Ln(Te($t(e),n[1]),n[0]);if(t===-Infinity)return qo(Te($t(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return Xt(Te(ot(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var kd=O({norm_:QT});function eE(e,t,n,r,a=!0){let s=R(e,"v","movingAverage"),i=R(t,"x","movingAverage"),o=R(n,"decay","movingAverage");a5(s,i),F(ea(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=Se(1),c=we(l,o),u=L(we(i,s),c);if(a){F(r!=null,()=>"When using zeroDebias: true, step is required.");let h=R(r,"step","movingAverage");u=Ne(u,we(l,Jr(o,h)))}return oe(s,u)}var F8=O({movingAverage_:eE});function tE(e,t,n){let r=R(e,"indices","scatterND","int32"),a=R(t,"updates","scatterND");jm(a,r,n);let s={indices:r,updates:a},i={shape:n};return D.runKernel(Io,s,i)}var A0=O({scatterND_:tE});function nE(e,t,n,r){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let a=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===a))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${a}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function rE(e,t,n,r=0){let a=R(e,"sparseIndices","sparseToDense","int32"),s=R(t,"sparseValues","sparseToDense"),i=R(r,"defaultValue","sparseToDense",s.dtype);nE(a,s,n,i);let o={sparseIndices:a,sparseValues:s,defaultValue:i},l={outputShape:n};return D.runKernel(Hh,o,l)}var dm=O({sparseToDense_:rE});function aE(e,t){let n=R(t,"indices","gatherND","int32"),r={params:R(e,"x","gatherND"),indices:n};return D.runKernel(ao,r)}var y0=O({gatherND_:aE});function sE(e,t){if(t==null)return e.shape.slice();if(ea(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r<e.shape.length;r++)t[r]==null&&e.shape[r]!=null?n.push(e.shape[r]):n.push(t[r]);return n}return t}function iE(e,t,n,r){let a=R(e,"x","dropout");if(F(a.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${a.dtype} tensor instead.`),F(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof et?a.clone():a;let s=sE(a,n),i=1-t,o=Ne(jo(oe(Ko(s,0,1,"float32",r),i)),i);return L(a,o)}var g0=O({dropout_:iE});function x0(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function pm(e,t,n){let r=1-e%2,a=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+r-1);a[s]=t-n*Math.cos(i)}return Qt(a,"float32")}async function oE(e,t,n=1){let r=R(e,"predictions","inTopK"),a=R(t,"targets","inTopK");F(r.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),F(r.rank-1===a.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${a.rank}`),en(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=r.shape[r.shape.length-1];F(n>0&&n<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`);let i=await r.data(),o=await a.data(),[l,c]=[i.length/s,s],u=G0("bool",l);for(let h=0;h<l;h++){let d=h*c,p=i.subarray(d,d+c),f=[];for(let m=0;m<p.length;m++)f.push({value:p[m],index:m});f.sort((m,A)=>A.value-m.value),u[h]=0;for(let m=0;m<n;m++)if(f[m].index===o[h]){u[h]=1;break}}return e!==r&&r.dispose(),t!==a&&a.dispose(),dr(u,a.shape,"bool")}var M8=oE,va={};ze(va,{conv2d:()=>lE,depthwiseConv2d:()=>uE,matMul:()=>cE});function hE(e,t,n,r,a,s="NHWC",i){let o=e;e.rank===3&&(o=q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=q(t,[1,t.shape[0],t.shape[1],t.shape[2]])),F(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),F(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),F(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let c=s==="NHWC"?o.shape[3]:o.shape[1],u=s==="NHWC"?l.shape[3]:l.shape[1];F(c===n[2],()=>`Error in conv2dDerFilter: depth of input ${c}) must match input depth in filter (${n[2]}.`),F(u===n[3],()=>`Error in conv2dDerFilter: depth of dy (${u}) must match output depth for filter (${n[3]}).`),i!=null&&F(Ut(a),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`);let h={x:o,dy:l},d={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,filterShape:n};return D.runKernel(bh,h,d)}var nA=O({conv2DBackpropFilter_:hE});function jd(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return L(e,Jo(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Gd(e,t){let n=t,r=Ot(e.shape,t.shape);return r.length>0&&(n=Te(n,r)),q(n,e.shape)}function qd(e,t,n,r){if(t==="linear")return e;if(t==="relu")return Rr(e);if(t==="elu")return Ho(e);if(t==="relu6")return pd(e);if(t==="prelu")return Du(e,n);if(t==="leakyrelu")return Ru(e,r);throw new Error(`Unknown fused activation ${t}.`)}var Xd=(e,t)=>!(e>0)||t==="linear";function dE({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:c,leakyreluAlpha:u}){if(l=l||"linear",Xd(D.state.gradientDepth,l)===!1){let w=Kr(e,t,n,r,a,s,i);return o!=null&&(w=oe(w,o)),qd(w,l,c,u)}let h=R(e,"x","conv2d"),d=R(t,"filter","conv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=q(h,[1,h.shape[0],h.shape[1],h.shape[2]])),F(p.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${p.rank}.`),F(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),i!=null&&F(Ut(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`),F(p.shape[3]===d.shape[2],()=>`Error in conv2d: depth of input (${p.shape[3]}) must match input depth for filter ${d.shape[2]}.`),F(zr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),F(a==="NHWC",()=>`Error in conv2d: got dataFormat of ${a} but only NHWC is currently supported.`);let m=tc(p.shape,d.shape,n,s,r,i),A;o!=null&&(A=R(o,"bias","fused conv2d"),[A]=vt(A,h),At(m.outShape,A.shape));let y;c!=null&&(y=R(c,"prelu weights","fused conv2d"));let g=(w,_)=>{let[N,T,E,M]=_,z=jd(w,E,l);F(Ea(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let P=Jm(T.shape,z,N,n,r),B=nA(T,z,N.shape,n,r),G=[P,B];if(M!=null){let V=Gd(M,z);G.push(V)}return G},b={x:p,filter:d,bias:A,preluActivationWeights:y},x={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:u};return o==null?Tr((w,_,N)=>{let T=D.runKernel(Vs,b,x);return N([_,w,T]),f&&(T=q(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:g}})(p,d):Tr((w,_,N,T)=>{let E=D.runKernel(Vs,b,x);return T([_,w,E,N]),f&&(E=q(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:g}})(p,d,A)}var lE=O({fusedConv2d_:dE});function pE(e,t,n,r,a,s=[1,1],i){let o=e;e.rank===3&&(o=q(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=q(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={x:o,dy:l},u={strides:r,pad:a,dimRoundingMode:i,dilations:s,filterShape:n};return D.runKernel(Nh,c,u)}var Z5=O({depthwiseConv2dNativeBackpropFilter_:pE});function fE(e,t,n,r,a,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=q(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={dy:o,filter:n},u={strides:r,pad:a,dimRoundingMode:i,dilations:s,inputShape:e},h=D.runKernel(Sh,c,u);return l?q(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var J5=O({depthwiseConv2dNativeBackpropInput_:fE});function mE({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:c,leakyreluAlpha:u}){if(Xd(D.state.gradientDepth,l)===!1){let w=Uo(e,t,n,r,a,s,i);return o!=null&&(w=oe(w,o)),qd(w,l,c,u)}let h=R(e,"x","depthwiseConv2d"),d=R(t,"filter","depthwiseConv2d"),p=h,f=!1;h.rank===3&&(f=!0,p=q(h,[1,h.shape[0],h.shape[1],h.shape[2]])),F(p.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${p.rank}.`),F(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),F(p.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${p.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),s==null&&(s=[1,1]),F(zr(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),i!=null&&F(Ut(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${i} but got pad ${r}.`);let m=tc(p.shape,d.shape,n,s,r,i,!0),A;o!=null&&(A=R(o,"bias","fused conv2d"),[A]=vt(A,h),At(m.outShape,A.shape));let y;c!=null&&(y=R(c,"prelu weights","fused depthwiseConv2d"));let g=(w,_)=>{F(Ea(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[N,T,E,M]=_,z=jd(w,E,l),P=J5(T.shape,z,N,n,r,s,i),B=Z5(T,z,N.shape,n,r,s,i);if(M!=null){let G=Gd(A,z);return[P,B,G]}return[P,B]},b={x:p,filter:d,bias:A,preluActivationWeights:y},x={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:u};return o==null?Tr((w,_,N)=>{let T=D.runKernel(Us,b,x);return N([_,w,T]),f&&(T=q(T,[T.shape[1],T.shape[2],T.shape[3]])),{value:T,gradFunc:g}})(p,d):Tr((w,_,N,T)=>{let E=D.runKernel(Us,b,x);return T([_,w,E,N]),f&&(E=q(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:g}})(p,d,A)}var uE=O({fusedDepthwiseConv2d_:mE});function AE({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:a,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o}){if(Xd(D.state.gradientDepth,s)===!1){let M=qe(e,t,n,r);return a!=null&&(M=oe(M,a)),qd(M,s,i,o)}let l=R(e,"a","fused matMul"),c=R(t,"b","fused matMul");[l,c]=vt(l,c);let u=n?l.shape[l.rank-2]:l.shape[l.rank-1],h=r?c.shape[c.rank-1]:c.shape[c.rank-2],d=n?l.shape[l.rank-1]:l.shape[l.rank-2],p=r?c.shape[c.rank-2]:c.shape[c.rank-1],f=l.shape.slice(0,-2),m=c.shape.slice(0,-2),A=Dt(f),y=Dt(m);F(l.rank>=2&&c.rank>=2&&l.rank===c.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${c.rank}.`),F(ea(f,m),()=>`Error in fused matMul: outer dimensions (${f}) and (${m}) of Tensors with shapes ${l.shape} and ${c.shape} must match.`),F(u===h,()=>`Error in fused matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${l.shape} and ${c.shape} and transposeA=${n} and transposeB=${r} must match.`);let g=l.shape.slice(0,-2).concat([d,p]),b=n?q(l,[A,u,d]):q(l,[A,d,u]),x=r?q(c,[y,p,h]):q(c,[y,h,p]),w;a!=null&&(w=R(a,"bias","fused matMul"),[w]=vt(w,l),At(g,w.shape));let _;i!=null&&(_=R(i,"prelu weights","fused matMul"));let N=(M,z)=>{let[P,B,G,V]=z,K=jd(q(M,G.shape),G,s),X,ee;if(!n&&!r?(X=qe(K,B,!1,!0),ee=qe(P,K,!0,!1)):!n&&r?(X=qe(K,B,!1,!1),ee=qe(K,P,!0,!1)):n&&!r?(X=qe(B,K,!1,!0),ee=qe(P,K,!1,!1)):(X=qe(B,K,!0,!0),ee=qe(K,P,!0,!0)),a!=null){let J=Gd(V,K);return[X,ee,J]}else return[X,ee]},T={a:b,b:x,bias:w,preluActivationWeights:_},E={transposeA:n,transposeB:r,activation:s,leakyreluAlpha:o};return a==null?Tr((M,z,P)=>{let B=D.runKernel(Bs,T,E);return P([M,z,B]),{value:q(B,g),gradFunc:N}})(b,x):Tr((M,z,P,B)=>{let G=D.runKernel(Bs,T,E);return B([M,z,G,P]),{value:q(G,g),gradFunc:N}})(b,x,w)}var cE=O({fusedMatMul_:AE});function yE(e){return pm(e,.54,.46)}var gE=O({hammingWindow_:yE});function xE(e){return pm(e,.5,.5)}var Y5=O({hannWindow_:xE});function wE(e,t,n,r=!1,a=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Me(e,s,t)),s+=n;if(r)for(;s<e.size;){let o=s+t-e.size,l=ct([Me(e,s,t-o),Cu([o],a)]);i.push(l),s+=n}return i.length===0?pr([],[0,t]):q(ct(i),[i.length,t])}var Q5=O({frame_:wE});function _E(e,t,n,r,a=Y5){r==null&&(r=x0(t));let s=Q5(e,t,n),i=L(s,a(t)),o=[];for(let l=0;l<s.shape[0];l++)o.push(Wu(Me(i,[l,0],[1,t]),r));return ct(o)}var bE=O({stft_:_E});function vE(e,t,n,r,a="bilinear",s=0){let i=R(e,"image","cropAndResize"),o=R(t,"boxes","cropAndResize","float32"),l=R(n,"boxInd","cropAndResize","int32"),c=o.shape[0];F(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),F(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${c},4] but had shape ${o.shape}.`),F(l.rank===1&&l.shape[0]===c,()=>`Error in cropAndResize: boxInd must be have size [${c}] but had shape ${o.shape}.`),F(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),F(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),F(a==="bilinear"||a==="nearest",()=>`method must be bilinear or nearest, but was ${a}`);let u={image:i,boxes:o,boxInd:l},h={method:a,extrapolationValue:s,cropSize:r};return D.runKernel(Ki,u,h)}var kE=O({cropAndResize_:vE});function IE(e){let t=R(e,"image","flipLeftRight","float32");F(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return D.runKernel(no,n,{})}var NE=O({flipLeftRight_:IE});function SE(e,t,n=0,r=.5){let a=R(e,"image","rotateWithOffset","float32");F(a.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${a.rank}.`);let s={image:a},i={radians:t,fillValue:n,center:r};return D.runKernel(Po,s,i)}var TE=O({rotateWithOffset_:SE});function ul(e,t,n,r,a,s){r==null&&(r=.5),a==null&&(a=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return n=Math.min(n,i),F(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),F(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),F(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),F(t.rank===1,()=>"scores must be a 1D tensor"),F(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),F(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s}}function EE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppression"),i=R(t,"scores","nonMaxSuppression"),o=ul(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:r,scoreThreshold:a};return D.runKernel(yo,{boxes:s,scores:i},l)}var CE=O({nonMaxSuppression_:EE});function FE(e,t,n){let r=RE(e,t,n),a=r<0?-(r+1):r;e.splice(a,0,t)}function RE(e,t,n){return $E(e,t,n||ME)}function ME(e,t){return e>t?1:e<t?-1:0}function $E(e,t,n){let r=0,a=e.length,s=0,i=!1;for(;r<a;){s=r+(a-r>>>1);let o=n(t,e[s]);o>0?r=s+1:(a=s,i=!o)}return i?r:-r-1}function ex(e,t,n,r,a){return rA(e,t,n,r,a,0)}function tx(e,t,n,r,a,s){return rA(e,t,n,r,a,0,!1,s,!0)}function nx(e,t,n,r,a,s){return rA(e,t,n,r,a,s,!0)}function rA(e,t,n,r,a,s,i=!1,o=!1,l=!1){let c=[];for(let A=0;A<t.length;A++)t[A]>a&&c.push({score:t[A],boxIndex:A,suppressBeginIndex:0});c.sort(rx);let u=s>0?-.5/s:0,h=[],d=[];for(;h.length<n&&c.length>0;){let A=c.pop(),{score:y,boxIndex:g,suppressBeginIndex:b}=A;if(y<a)break;let x=!1;for(let w=h.length-1;w>=b;--w){let _=DE(e,g,h[w]);if(_>=r){x=!0;break}if(A.score=A.score*OE(r,u,_),A.score<=a)break}A.suppressBeginIndex=h.length,x||(A.score===y?(h.push(g),d.push(A.score)):A.score>a&&FE(c,A,rx))}let p=h.length,f=n-p;o&&f>0&&(h.push(...new Array(f).fill(0)),d.push(...new Array(f).fill(0)));let m={selectedIndices:h};return i&&(m.selectedScores=d),l&&(m.validOutputs=p),m}function DE(e,t,n){let r=e.subarray(t*4,t*4+4),a=e.subarray(n*4,n*4+4),s=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),o=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),c=Math.min(a[0],a[2]),u=Math.min(a[1],a[3]),h=Math.max(a[0],a[2]),d=Math.max(a[1],a[3]),p=(o-s)*(l-i),f=(h-c)*(d-u);if(p<=0||f<=0)return 0;let m=Math.max(s,c),A=Math.max(i,u),y=Math.min(o,h),g=Math.min(l,d),b=Math.max(y-m,0)*Math.max(g-A,0);return b/(p+f-b)}function OE(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function rx(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function zE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=R(e,"boxes","nonMaxSuppressionAsync"),i=R(t,"scores","nonMaxSuppressionAsync"),o=ul(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),c=l[0],u=l[1],{selectedIndices:h}=ex(c,u,n,r,a);return s!==e&&s.dispose(),i!==t&&i.dispose(),Qt(h,"int32")}var PE=zE;function LE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=ul(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let c={boxes:i,scores:o},u={maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s},h=D.runKernel(xo,c,u);return{selectedIndices:h[0],selectedScores:h[1]}}var WE=O({nonMaxSuppressionWithScore_:LE});async function BE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=ul(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let c=await Promise.all([i.data(),o.data()]),u=c[0],h=c[1],{selectedIndices:d,selectedScores:p}=nx(u,h,n,r,a,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Qt(d,"int32"),selectedScores:Qt(p)}}var VE=BE;function UE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppression"),o=R(t,"scores","nonMaxSuppression"),l=ul(i,o,n,r,a,null),c=l.maxOutputSize,u=l.iouThreshold,h=l.scoreThreshold,d={boxes:i,scores:o},p={maxOutputSize:c,iouThreshold:u,scoreThreshold:h,padToMaxOutputSize:s},f=D.runKernel(go,d,p);return{selectedIndices:f[0],validOutputs:f[1]}}var HE=O({nonMaxSuppressionPadded_:UE});async function jE(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=R(e,"boxes","nonMaxSuppressionAsync"),o=R(t,"scores","nonMaxSuppressionAsync"),l=ul(i,o,n,r,a,null),c=l.maxOutputSize,u=l.iouThreshold,h=l.scoreThreshold,[d,p]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=tx(d,p,c,u,h,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Qt(f,"int32"),validOutputs:Se(m,"int32")}}var GE=jE;function qE(e,t,n=!1,r=!1){let a=R(e,"images","resizeBilinear");F(a.rank===3||a.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${a.rank}.`),F(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),F(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=q(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},c=D.runKernel(Ss,o,l);return i?q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var ax=O({resizeBilinear_:qE});function XE(e,t,n=!1,r=!1){let a=R(e,"images","resizeNearestNeighbor");F(a.rank===3||a.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${a.rank}.`),F(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),F(a.dtype==="float32"||a.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),F(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=a,i=!1;a.rank===3&&(i=!0,s=q(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},c=D.runKernel(Au,o,l);return i?q(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var sx=O({resizeNearestNeighbor_:XE});function KE(e,t,n){F(t%1==0,()=>`bandPart(): numLower must be an integer, got ${t}.`),F(n%1==0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=R(e,"a","bandPart");F(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let a=r.shape,[s,i]=r.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);let o=q(dd(0,s,1,"int32"),[-1,1]),l=dd(0,i,1,"int32"),c=we(o,l),u=er(Gs(c,Se(+t,"int32")),_a(c,Se(-n,"int32"))),h=Ct([s,i],r.dtype);return q(Sn(tr(q(r,[-1,s,i])).map(d=>fn(u,d,h))),a)}var ZE=O({bandPart_:KE});function JE(e){let t;if(Array.isArray(e)){t=!1,F(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let a=e[0].shape[0];for(let s=1;s<e.length;++s)F(e[s].shape[0]===a,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${a})`)}else t=!0,e=an(e,e.shape[0],0).map(a=>ba(a,[0]));F(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],r=e;for(let a=0;a<e.length;++a)n.push(D.tidy(()=>{let s=r[a];if(a>0)for(let i=0;i<a;++i){let o=L(Te(L(n[i],s)),n[i]);s=we(s,o)}return Ne(s,kd(s,"euclidean"))}));return t?Sn(n,0):n}var YE=O({gramSchmidt_:JE});function QE(e,t=!1){if(F(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return ix(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,c)=>l*c),r=tr(q(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),a=[],s=[];r.forEach(l=>{let[c,u]=ix(l,t);a.push(c),s.push(u)});let i=q(Sn(a,0),e.shape),o=q(Sn(s,0),e.shape);return[i,o]}}function ix(e,t=!1){return D.tidy(()=>{F(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],r=e.shape[1],a=Zf(n),s=Nr(e),i=pr([[1]],[1,1]),o=Nr(i),l=n>=r?r:n;for(let c=0;c<l;++c){let u=s,h=o,d=a;[o,s,a]=D.tidy(()=>{let p=Me(s,[c,c],[n-c,1]),f=kd(p),m=Me(s,[c,c],[1,1]),A=fn(Qn(m,0),pr([[-1]]),pr([[1]])),y=we(m,L(A,f)),g=Ne(p,y);g.shape[0]===1?o=Nr(i):o=ct([i,Me(g,[1,0],[g.shape[0]-1,g.shape[1]])],0);let b=_t(Ne(qe(A,y),f)),x=Me(s,[c,0],[n-c,r]),w=L(b,o),_=at(o);if(c===0)s=we(x,qe(w,qe(_,x)));else{let E=we(x,qe(w,qe(_,x)));s=ct([Me(s,[0,0],[c,r]),E],0)}let N=at(w),T=Me(a,[0,c],[n,a.shape[1]-c]);if(c===0)a=we(T,qe(qe(T,o),N));else{let E=we(T,qe(qe(T,o),N));a=ct([Me(a,[0,0],[n,c]),E],1)}return[o,s,a]}),Fe([u,h,d])}return!t&&n>r&&(a=Me(a,[0,0],[n,r]),s=Me(s,[0,0],[r,r])),[a,s]})}var eC=O({qr_:QE}),sn;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(sn||(sn={}));function tC(e,t,n=sn.SUM_BY_NONZERO_WEIGHTS){let r=R(e,"losses","computeWeightedLoss"),a=null;t!=null&&(a=R(t,"weights","computeWeightedLoss"));let s=a==null?r:L(r,a);if(n===sn.NONE)return s;if(n===sn.SUM)return Te(s);if(n===sn.MEAN){if(a==null)return bt(s);{let i=r.size/a.size,o=Ne(Te(s),Te(a));return i>1?Ne(o,Se(i)):o}}if(n===sn.SUM_BY_NONZERO_WEIGHTS){if(a==null)return Ne(Te(s),Se(r.size));{let i=L(a,Cr(r.shape)),o=ye(Te(qs(i,Se(0))),"float32");return Ne(Te(s),o)}}throw Error(`Unknown reduction: ${n}`)}var na=O({computeWeightedLoss_:tC});function nC(e,t,n,r=sn.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","absoluteDifference"),s=R(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=R(n,"weights","absoluteDifference")),en(a.shape,s.shape,"Error in absoluteDifference: ");let o=$t(we(a,s));return na(o,i,r)}var rC=O({absoluteDifference_:nC});function aC(e,t,n,r,a=sn.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","cosineDistance"),i=R(t,"predictions","cosineDistance"),o=null;r!=null&&(o=R(r,"weights","cosineDistance")),en(s.shape,i.shape,"Error in cosineDistance: ");let l=Se(1),c=we(l,Te(L(s,i),n,!0));return na(c,o,a)}var sC=O({cosineDistance_:aC});function iC(e,t,n,r=sn.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","hingeLoss"),s=R(t,"predictions","hingeLoss"),i=null;n!=null&&(i=R(n,"weights","hingeLoss")),en(a.shape,s.shape,"Error in hingeLoss: ");let o=Se(1);a=we(L(Se(2),a),o);let l=Rr(we(o,L(a,s)));return na(l,i,r)}var oC=O({hingeLoss_:iC});function lC(e,t,n,r=1,a=sn.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","huberLoss"),i=R(t,"predictions","huberLoss"),o=null;n!=null&&(o=R(n,"weights","huberLoss")),en(s.shape,i.shape,"Error in huberLoss: ");let l=Se(r),c=$t(we(i,s)),u=Xo(c,l),h=we(c,u),d=oe(L(Se(.5),ot(u)),L(l,h));return na(d,o,a)}var uC=O({huberLoss_:lC});function cC(e,t,n,r=1e-7,a=sn.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"labels","logLoss"),i=R(t,"predictions","logLoss"),o=null;n!=null&&(o=R(n,"weights","logLoss")),en(s.shape,i.shape,"Error in logLoss: ");let l=Se(1),c=Se(r),u=_t(L(s,kn(oe(i,c)))),h=L(we(l,s),kn(oe(we(l,i),c))),d=we(u,h);return na(d,o,a)}var hC=O({logLoss_:cC});function dC(e,t,n,r=sn.SUM_BY_NONZERO_WEIGHTS){let a=R(e,"labels","meanSquaredError"),s=R(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=R(n,"weights","meanSquaredError")),en(a.shape,s.shape,"Error in meanSquaredError: ");let o=_d(a,s);return na(o,i,r)}var pC=O({meanSquaredError_:dC});function fC(e,t){let n=R(e,"labels","sigmoidCrossEntropyWithLogits"),r=R(t,"logits","sigmoidCrossEntropyWithLogits");en(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let a=Rr(r),s=L(r,n),i=od(Pn(_t($t(r))));return oe(we(a,s),i)}function mC(e,t,n,r=0,a=sn.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"multiClassLabels","sigmoidCrossEntropy"),i=R(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=R(n,"weights","sigmoidCrossEntropy")),en(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){let c=Se(r),u=Se(1),h=Se(.5);s=oe(L(s,we(u,c)),L(h,c))}let l=fC(s,i);return na(l,o,a)}var AC=O({sigmoidCrossEntropy_:mC});function yC(e,t,n=-1){if(n===-1&&(n=t.rank-1),n!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${n}`);return Tr((r,a,s)=>{let i=Yf(a,[n],!0),o=we(ye(a,"float32"),i);s([r,o]);let l=_t(L(o,r));return{value:Te(l,[n]),gradFunc:(c,u)=>{let[h,d]=u,p=ni(c.shape,[n]);return[L(q(c,p),we(ye(h,"float32"),Pn(d))),L(q(c,p),we(Pn(d),ye(h,"float32")))]}}})(e,t)}function gC(e,t,n,r=0,a=sn.SUM_BY_NONZERO_WEIGHTS){let s=R(e,"onehotLabels","softmaxCrossEntropy"),i=R(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=R(n,"weights","softmaxCrossEntropy")),en(s.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){let c=Se(r),u=Se(1),h=Se(s.shape[1]);s=oe(L(s,we(u,c)),Ne(c,h))}let l=yC(s,i);return na(l,o,a)}var xC=O({softmaxCrossEntropy_:gC}),$8={fft:Lu,ifft:Zo,rfft:Wu,irfft:wd},D8={hammingWindow:gE,hannWindow:Y5,frame:Q5,stft:bE},St={flipLeftRight:NE,resizeNearestNeighbor:sx,resizeBilinear:ax,rotateWithOffset:TE,cropAndResize:kE,nonMaxSuppression:CE,nonMaxSuppressionAsync:PE,nonMaxSuppressionWithScore:WE,nonMaxSuppressionWithScoreAsync:VE,nonMaxSuppressionPadded:HE,nonMaxSuppressionPaddedAsync:GE},w0={bandPart:ZE,gramSchmidt:YE,qr:eC},O8={absoluteDifference:rC,computeWeightedLoss:na,cosineDistance:sC,hingeLoss:oC,huberLoss:uC,logLoss:hC,meanSquaredError:pC,sigmoidCrossEntropy:AC,softmaxCrossEntropy:xC},Yr=class extends P5{minimize(e,t=!1,n){let{value:r,grads:a}=this.computeGradients(e,n);if(n!=null){let s=n.map(i=>({name:i.name,tensor:a[i.name]}));this.applyGradients(s)}else this.applyGradients(a);return Fe(a),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return o0(e,t)}dispose(){this.iterations_!=null&&Fe(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:Se(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Yr,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Id=class extends Yr{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=D.registeredVariables[t],a=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:U(()=>He(r).variable(a))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:U(()=>He(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[n].variable,o=this.accumulatedUpdates[n].variable;U(()=>{let l=oe(L(i,this.rho),L(ot(s),1-this.rho)),c=L(Ne(Xt(oe(o,this.epsilon)),Xt(oe(i,this.epsilon))),s),u=oe(L(o,this.rho),L(ot(c),1-this.rho));i.assign(l),o.assign(u);let h=oe(L(c,-this.learningRate),r);r.assign(h)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Fe(this.accumulatedGrads.map(e=>e.variable)),Fe(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};Id.className="Adadelta";Ta(Id);var Nd=class extends Yr{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=D.registeredVariables[t];if(this.accumulatedGrads[n]==null){let i=!1;this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:U(()=>Cu(r.shape,this.initialAccumulatorValue).variable(i))}}let a=Array.isArray(e)?e[n].tensor:e[t];if(a==null)return;let s=this.accumulatedGrads[n].variable;U(()=>{let i=oe(s,ot(a));s.assign(i);let o=oe(L(Ne(a,Xt(oe(i,D.backend.epsilon()))),-this.learningRate),r);r.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Fe(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}};Nd.className="Adagrad";Ta(Nd);var Sd=class extends Yr{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],U(()=>{this.accBeta1=Se(t).variable(),this.accBeta2=Se(n).variable()}),r==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);U(()=>{let n=we(1,this.accBeta1),r=we(1,this.accBeta2);t.forEach((a,s)=>{let i=D.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:U(()=>He(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${a}/v`,variable:U(()=>He(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let c=this.accumulatedFirstMoment[s].variable,u=this.accumulatedSecondMoment[s].variable,h=oe(L(c,this.beta1),L(l,1-this.beta1)),d=oe(L(u,this.beta2),L(ot(l),1-this.beta2)),p=Ne(h,n),f=Ne(d,r);c.assign(h),u.assign(d);let m=oe(L(Ne(p,oe(Xt(f),this.epsilon)),-this.learningRate),i);i.assign(m)}),this.accBeta1.assign(L(this.accBeta1,this.beta1)),this.accBeta2.assign(L(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Fe(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Fe(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),U(()=>{this.accBeta1.assign(Jr(this.beta1,this.iterations_+1)),this.accBeta2.assign(Jr(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Sd.className="Adam";Ta(Sd);var Td=class extends Yr{constructor(e,t,n,r=null,a=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=a,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],U(()=>{this.iteration=Se(0).variable(),this.accBeta1=Se(t).variable()}),r==null&&(this.epsilon=D.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);U(()=>{let n=we(1,this.accBeta1),r=Ne(-this.learningRate,oe(L(this.iteration,this.decay),1));t.forEach((a,s)=>{let i=D.registeredVariables[a],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${a}/m`,variable:He(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${a}/v`,variable:He(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[a];if(l==null)return;let c=this.accumulatedFirstMoment[s].variable,u=this.accumulatedWeightedInfNorm[s].variable,h=oe(L(c,this.beta1),L(l,1-this.beta1)),d=L(u,this.beta2),p=$t(l),f=Er(d,p);c.assign(h),u.assign(f);let m=oe(L(Ne(r,n),Ne(h,oe(f,this.epsilon))),i);i.assign(m)}),this.iteration.assign(oe(this.iteration,1)),this.accBeta1.assign(L(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Fe(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Fe(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Td.className="Adamax";Ta(Td);var Bu=class extends Yr{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=Array.isArray(e)?e[n].tensor:e[t];if(r==null)return;let a=D.registeredVariables[t];U(()=>{let s=oe(L(this.c,r),a);a.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Bt(Se(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};Bu.className="SGD";Ta(Bu);var Ed=class extends Bu{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=Se(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=D.registeredVariables[t];if(this.accumulations[n]==null){let i=!1;this.accumulations[n]={originalName:`${t}/momentum`,variable:U(()=>He(r).variable(i))}}let a=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&U(()=>{let i,o=oe(L(this.m,a),s);this.useNesterov?i=oe(L(this.c,oe(s,L(o,this.m))),r):i=oe(L(this.c,o),r),a.assign(o),r.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Fe(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}};Ed.className="Momentum";Ta(Ed);var Cd=class extends Yr{constructor(e,t=.9,n=0,r=null,a=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=a,r==null&&(this.epsilon=D.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let r=D.registeredVariables[t],a=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:U(()=>He(r).variable(a))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:U(()=>He(r).variable(a))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:U(()=>He(r).variable(a))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;U(()=>{let l=oe(L(i,this.decay),L(ot(s),1-this.decay));if(this.centered){let c=this.accumulatedMeanGrads[n].variable,u=oe(L(c,this.decay),L(s,1-this.decay)),h=Ne(L(s,this.learningRate),Xt(we(l,oe(ot(u),this.epsilon)))),d=oe(L(o,this.momentum),h);i.assign(l),c.assign(u),o.assign(d);let p=we(r,d);r.assign(p)}else{let c=oe(L(i,this.decay),L(ot(s),1-this.decay)),u=oe(L(o,this.momentum),Ne(L(s,this.learningRate),Xt(oe(c,this.epsilon))));i.assign(c),o.assign(u);let h=we(r,u);r.assign(h)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Fe(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Fe(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Fe(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};Cd.className="RMSProp";Ta(Cd);var ri=class{static sgd(e){return new Bu(e)}static momentum(e,t,n=!1){return new Ed(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,a=!1){return new Cd(e,t,n,r,a)}static adam(e=.001,t=.9,n=.999,r=null){return new Sd(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new Id(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,a=0){return new Td(e,t,n,r,a)}static adagrad(e,t=.1){return new Nd(e,t)}},Xs={sgd:ri.sgd,momentum:ri.momentum,adadelta:ri.adadelta,adagrad:ri.adagrad,rmsprop:ri.rmsprop,adamax:ri.adamax,adam:ri.adam},wC=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function Rd(){return new Promise(e=>wC(()=>e()))}var C={};ze(C,{ERF_A1:()=>RC,ERF_A2:()=>FC,ERF_A3:()=>MC,ERF_A4:()=>$C,ERF_A5:()=>DC,ERF_P:()=>CC,PARALLELIZE_THRESHOLD:()=>aA,SELU_SCALE:()=>lx,SELU_SCALEALPHA:()=>ox,applyActivation:()=>qd,assertAndGetBroadcastShape:()=>At,assertAxesAreInnerMostDims:()=>IS,assertParamsConsistent:()=>_C,assignToTypedArray:()=>UC,axesAreInnerMostDims:()=>Ym,calculateShapes:()=>N5,combineLocations:()=>j5,complexWithEvenIndex:()=>WC,complexWithOddIndex:()=>BC,computeConv2DInfo:()=>tc,computeConv3DInfo:()=>U5,computeDefaultPad:()=>Zm,computeDilation2DInfo:()=>nN,computeOptimalWindowSize:()=>vC,computeOutAndReduceShapes:()=>G5,computeOutShape:()=>bC,computePool2DInfo:()=>V5,computePool3DInfo:()=>rN,convertConv2DDataFormat:()=>B5,eitherStridesOrDilationsAreOne:()=>zr,expandShapeToKeepDim:()=>ni,exponent:()=>jC,exponents:()=>HC,fromStringArrayToUint8:()=>XC,fromUint8ToStringArray:()=>qC,getAxesPermutation:()=>q5,getBroadcastDims:()=>jN,getComplexWithIndex:()=>VC,getFusedBiasGradient:()=>Gd,getFusedDyActivation:()=>jd,getImageCenter:()=>kC,getInnerMostAxes:()=>NS,getPermuted:()=>NC,getReductionAxes:()=>Ot,getReshaped:()=>IC,getReshapedPermuted:()=>SC,getSliceBeginCoords:()=>TC,getSliceSize:()=>EC,getUndoAxesPermutation:()=>Qm,log:()=>zC,mergeRealAndImagArrays:()=>PC,prepareAndValidate:()=>I5,prepareSplitSize:()=>GC,segment_util:()=>ux,shouldFuse:()=>Xd,slice_util:()=>rn,splitRealAndImagArrays:()=>LC,tupleValuesAreOne:()=>Ea,upcastType:()=>Jn,validateInput:()=>jm,validateUpdateShape:()=>Hm,warn:()=>OC});function _C(e,t){let n=e[0].length;e.forEach((a,s)=>{F(a.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),F(t>=0&&t<n,()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((a,s)=>{for(let i=0;i<n;i++)F(i===t||a[i]===r[i],()=>`Error in concat${n}D: Shape of tensors[${s}] (${a}) does not match the shape of the rest (${r}) along the non-concatenated axis ${s}.`)})}function bC(e,t){let n=e[0].slice();for(let r=1;r<e.length;r++)n[t]+=e[r][t];return n}var aA=30;function vC(e){return e<=aA?e:Dd(e,Math.floor(Math.sqrt(e)))}function kC(e,t,n){let r=n*(typeof e=="number"?e:e[0]),a=t*(typeof e=="number"?e:e[1]);return[r,a]}function IC(e,t,n,r=!0){let a=[];if(r)a=a.concat(t.slice(0)),a.push(e[0]/n),a=a.concat(e.slice(1));else{a=a.concat(e[0]);let s=t.length;for(let i=0;i<s;++i)a=a.concat([e[i+1]/t[i],t[i]]);a=a.concat(e.slice(s+1))}return a}function NC(e,t,n=!0){let r=[];if(n){r.push(t);for(let a=t+1;a<e;++a)a<=2*t?(r.push(a),r.push(a-(t+1))):r.push(a)}else{let a=[],s=[];for(let i=1;i<e;++i)i>=t*2+1||i%2==1?s.push(i):a.push(i);r.push(...a),r.push(0),r.push(...s)}return r}function SC(e,t,n,r=!0){let a=[];r?a.push(e[0]/n):a.push(e[0]*n);for(let s=1;s<e.length;++s)s<=t.length?r?a.push(t[s-1]*e[s]):a.push(e[s]/t[s-1]):a.push(e[s]);return a}function TC(e,t){let n=[0];for(let r=0;r<t;++r)n.push(e[r][0]);return n}function EC(e,t,n){let r=e.slice(0,1);for(let a=0;a<n;++a)r.push(e[a+1]-t[a][0]-t[a][1]);return r}var ox=1.7580993408473768,lx=1.0507009873554805,CC=.3275911,RC=.254829592,FC=-.284496736,MC=1.421413741,$C=-1.453152027,DC=1.061405429;function OC(...e){Q().getBool("IS_TEST")||console.warn(...e)}function zC(...e){Q().getBool("IS_TEST")||console.log(...e)}function PC(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let r=0;r<n.length;r+=2)n[r]=e[r/2],n[r+1]=t[r/2];return n}function LC(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=e[r],n[r/2]=e[r+1];return{real:t,imag:n}}function WC(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=0;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function BC(e){let t=Math.floor(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let a=2;a<e.length;a+=4)n[Math.floor(a/4)]=e[a],r[Math.floor(a/4)]=e[a+1];return{real:n,imag:r}}function VC(e,t){let n=e[t*2],r=e[t*2+1];return{real:n,imag:r}}function UC(e,t,n,r){e[r*2]=t,e[r*2+1]=n}function HC(e,t){let n=new Float32Array(e/2),r=new Float32Array(e/2);for(let a=0;a<Math.ceil(e/2);a++){let s=(t?2:-2)*Math.PI*(a/e);n[a]=Math.cos(s),r[a]=Math.sin(s)}return{real:n,imag:r}}function jC(e,t,n){let r=(n?2:-2)*Math.PI*(e/t),a=Math.cos(r),s=Math.sin(r);return{real:a,imag:s}}function GC(e,t,n=0){let r=[];if(typeof t=="number")F(e.shape[n]%t==0,()=>"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let a=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);F(a<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[n]-i}F(e.shape[n]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}var ux={};ze(ux,{collectGatherOpShapeInfo:()=>JC,computeOutShape:()=>ZC,segOpComputeOptimalWindowSize:()=>KC});function KC(e,t){let n=!1,r;for(e<=aA?(r=e,n=!0):r=Dd(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=Dd(e,r+1);return r}function ZC(e,t,n){let r=[],a=e.length;for(let s=0;s<a;s++)s!==t?r.push(e[s]):r.push(n);return r}function JC(e,t,n,r){let a=t.shape.length,s=e.shape.length;if(r!==0&&(r<-a||r>a))throw new Error(`Expect batchDims in the range of [-${a}, ${a}], but got ${r}`);if(r<0&&(r+=a),r>s)throw new Error(`batchDims (${r}) must be less than rank(x) (
|
|
${s}).`);if(n<r)throw new Error(`batchDims (${r}) must be less than or equal to axis (${n}).`);for(let h=0;h<r;++h)if(e.shape[h]!==t.shape[h])throw new Error(`x.shape[${h}]: ${e.shape[h]} should be equal to indices.shape[${h}]: ${t.shape[h]}.`);let i=e.shape[n],o=[],l=1,c=1,u=1;for(let h=0;h<r;++h)o.push(e.shape[h]),l*=e.shape[h];for(let h=r;h<n;h++)o.push(e.shape[h]),c*=e.shape[h];for(let h=r;h<a;h++)o.push(t.shape[h]);for(let h=n+1;h<s;h++)o.push(e.shape[h]),u*=e.shape[h];return{batchSize:l,sliceSize:u,outerSize:c,dimSize:i,outputShape:o}}function qC(e){try{return e.map(t=>Pd(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function XC(e){return e.map(t=>Xu(t))}var Fr={};ze(Fr,{nonMaxSuppressionV3Impl:()=>ex,nonMaxSuppressionV4Impl:()=>tx,nonMaxSuppressionV5Impl:()=>nx,whereImpl:()=>X5});function ve(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var YC=Fr.whereImpl,Fd=class extends nu{constructor(){super();this.blockSize=48,this.firstUse=!0,this.data=new mh(this,Sr())}nextDataId(){return Fd.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,Q().get("IS_NODE")&&C.warn(`
|
|
============================
|
|
Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
|
|
============================`));let r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&k.isString(n[0])){let a=n.map(s=>k.encodeString(s));r=this.write(a,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,r,a){this.data.set(e,{values:t,dtype:r,refCount:a})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let r=this.readSync(n.real.dataId),a=this.readSync(n.imag.dataId);return C.mergeRealAndImagArrays(r,a)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>k.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return We(e.shape,e.dtype,n)}makeOutput(e,t,n){let r=this.write(e,t,n);return Sr().makeTensorFromDataId(r,t,n,this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=k.now();return e(),{kernelMs:k.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){ve([e],"where");let t=this.readSync(e.dataId);return YC(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Fd.nextDataId=0;var fm={};ze(fm,{addImpl:()=>hx,bincountImpl:()=>sA,bincountReduceImpl:()=>dx,ceilImpl:()=>px,concatImpl:()=>iA,expImpl:()=>fx,expm1Impl:()=>mx,floorImpl:()=>Ax,gatherV2Impl:()=>yx,greaterImpl:()=>gx,lessImpl:()=>xx,linSpaceImpl:()=>wx,logImpl:()=>_x,maxImpl:()=>bx,maximumImpl:()=>vx,minimumImpl:()=>kx,multiplyImpl:()=>oA,negImpl:()=>Ix,notEqualImpl:()=>Nx,prodImpl:()=>Sx,rangeImpl:()=>uA,rsqrtImpl:()=>Tx,simpleAbsImpl:()=>cx,sliceImpl:()=>Kd,squaredDifferenceImpl:()=>Ex,stridedSliceImpl:()=>Cx,subImpl:()=>Rx,tileImpl:()=>Fx,topKImpl:()=>Mx,transposeImpl:()=>lA,uniqueImpl:()=>$x});function cx(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var QC=e=>{let{x:t}=e.inputs,n=e.backend;ve(t,"abs");let r=new Float32Array(k.sizeFromShape(t.shape)),a=n.data.get(t.dataId).values;return r=cx(a),n.makeOutput(r,t.shape,"float32")},eR={kernelName:Li,backendName:"cpu",kernelFunc:QC};function Rt(e){return(t,n,r,a,s)=>{let i=C.assertAndGetBroadcastShape(t,n),o=i.length,l=k.computeStrides(i),c=k.sizeFromShape(i),u=k.getTypedArrayFromDType(s,c),h=t.length,d=n.length,p=k.computeStrides(t),f=k.computeStrides(n),m=C.getBroadcastDims(t,i),A=C.getBroadcastDims(n,i);if(m.length+A.length===0)for(let y=0;y<u.length;++y)u[y]=e(r[y%r.length],a[y%a.length]);else for(let y=0;y<u.length;++y){let g=k.indexToLoc(y,o,l),b=g.slice(-h);m.forEach(N=>b[N]=0);let x=k.locToIndex(b,h,p),w=g.slice(-d);A.forEach(N=>w[N]=0);let _=k.locToIndex(w,d,f);u[y]=e(r[x],a[_])}return[u,i]}}function Tn(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=n.makeTensorInfo(r.shape,"complex64"),l=n.data.get(o.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",s),imag:n.makeTensorInfo(a.shape,"float32",i)},o}var tR={kernelName:_h,backendName:"cpu",kernelFunc:Tn};function Zd(e,t,n="float32"){if(n==="complex64"){let a=Zd(e,t,"float32"),s=Zd(e,t,"float32");return Tn({inputs:{real:a,imag:s},backend:e})}let r=k.makeZerosTypedArray(k.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function Pr(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var nR={kernelName:ds,backendName:"cpu",kernelFunc:Pr};function ai(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.real,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var rR={kernelName:Bh,backendName:"cpu",kernelFunc:ai};function Ca(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return Pr({inputs:{x:a},backend:n});let i=Zd(n,a.shape,a.dtype),o=Ca({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=Tn({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=ai({inputs:{input:a},backend:n}),o=Ca({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(a.dtype,s)){let i=Pr({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32"){let i=n.data.get(a.dataId).values,o=Int32Array.from(i);return n.makeTensorInfo(a.shape,"int32",o)}if(s==="bool"){let i=n.data.get(a.dataId).values,o=k.toTypedArray([0],a.dtype),[l,c]=Rt((u,h)=>u!==h?1:0)(a.shape,[],i,o,"bool");return n.makeTensorInfo(c,"bool",l)}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var aR={kernelName:Qa,backendName:"cpu",kernelFunc:Ca};function Ht(e,t,n,r){return n==null?({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;ve([i,o],e);let c=l.data.get(i.dataId).values,u=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,c,u,h);return l.makeTensorInfo(p,h,d)}:({inputs:a,backend:s})=>{let{a:i,b:o}=a,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let c=Ca({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),u=l.data.get(c.dataId),h=u.complexTensorInfos.real,d=u.complexTensorInfos.imag,p=l.data.get(h.dataId).values,f=l.data.get(d.dataId).values,m=Ca({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),A=l.data.get(m.dataId),y=A.complexTensorInfos.real,g=A.complexTensorInfos.imag,b=l.data.get(y.dataId).values,x=l.data.get(g.dataId).values,[w,_,N]=n(i.shape,o.shape,p,f,b,x),T=l.makeTensorInfo(N,"float32",w),E=l.makeTensorInfo(N,"float32",_),M=Tn({inputs:{real:T,imag:E},backend:l});return l.disposeIntermediateTensorInfo(c),l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(T),l.disposeIntermediateTensorInfo(E),M}else{let c=l.data.get(i.dataId).values,u=l.data.get(o.dataId).values,h=r||i.dtype,[d,p]=t(i.shape,o.shape,c,u,h);return l.makeTensorInfo(p,h,d)}}}function cA(e){return(t,n,r,a,s,i)=>{let o=C.assertAndGetBroadcastShape(t,n),l=k.sizeFromShape(o),c=o.length,u=k.computeStrides(o),h=k.getTypedArrayFromDType("float32",l),d=k.getTypedArrayFromDType("float32",l),p=C.getBroadcastDims(t,o),f=C.getBroadcastDims(n,o),m=C.mergeRealAndImagArrays(r,a),A=C.mergeRealAndImagArrays(s,i),y=t.length,g=k.computeStrides(t),b=n.length,x=k.computeStrides(n);if(p.length+f.length===0)for(let w=0;w<h.length;w++){let _=w%m.length,N=w%A.length,T=e(m[_*2],m[_*2+1],A[N*2],A[N*2+1]);h[w]=T.real,d[w]=T.imag}else for(let w=0;w<h.length;w++){let _=k.indexToLoc(w,c,u),N=_.slice(-y);p.forEach(P=>N[P]=0);let T=k.locToIndex(N,y,g),E=_.slice(-b);f.forEach(P=>E[P]=0);let M=k.locToIndex(E,b,x),z=e(m[T*2],m[T*2+1],A[M*2],A[M*2+1]);h[w]=z.real,d[w]=z.imag}return[h,d,o]}}var hx=Rt((e,t)=>e+t),sR=cA((e,t,n,r)=>({real:e+n,imag:t+r})),nc=Ht(fa,hx,sR),iR={kernelName:fa,backendName:"cpu",kernelFunc:nc};function sA(e,t,n,r,a){let s=k.sizeFromShape(r),i=k.makeZerosTypedArray(a,n);for(let o=0;o<e.length;o++){let l=e[o];if(l<0)throw new Error("Input x must be non-negative!");l>=a||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function dx(e,t,n,r=!1){let a=e.shape[0],s=e.shape[1],i=We([a,n],t.dtype);for(let o=0;o<a;o++)for(let l=0;l<s;l++){let c=e.get(o,l);if(c<0)throw new Error("Input x must be non-negative!");c>=n||(r?i.set(1,o,c):t.size>0?i.set(i.get(o,c)+t.get(o,l),o,c):i.set(i.get(o,c)+1,o,c))}return i}function cl(e){return(t,n,r)=>{let a=k.getTypedArrayFromDType(n,t.length);for(let s=0;s<t.length;++s)a[s]=e(t[s],r);return a}}function st(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(ve(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,c=k.sizeFromShape(i.shape),u=n||i.dtype,h=k.getArrayFromDType(u,c);for(let d=0;d<c;++d)h[d]=t(l[d],a);return o.makeTensorInfo(i.shape,u,h)}}function hl(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;if(ve(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,c=n||i.dtype,u=t(l,c,a);return o.makeTensorInfo(i.shape,c,u)}}var px=cl(e=>Math.ceil(e)),oR=hl(es,px),lR={kernelName:es,backendName:"cpu",kernelFunc:oR};function iA(e,t,n,r){let a=k.getArrayFromDType(n,k.sizeFromShape(t));if(r&&n!=="string"){let s=0;e.forEach(i=>{let o=k.sizeFromShape(i.shape);a.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=n==="string"?C.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let c=0;c<i.shape[0];++c){let u=c*t[1]+s;for(let h=0;h<i.shape[1];++h)a[u+h]=o[l++]}s+=i.shape[1]})}return a}var fx=cl(e=>Math.exp(e)),Dx=hl(os,fx),uR={kernelName:os,backendName:"cpu",kernelFunc:Dx},mx=cl(e=>Math.expm1(e)),cR=hl(to,mx),hR={kernelName:to,backendName:"cpu",kernelFunc:cR},Ax=cl(e=>Math.floor(e)),dR=hl(ls,Ax),pR={kernelName:ls,backendName:"cpu",kernelFunc:dR};function yx(e,t,n){let r=We(n,e.dtype);for(let a=0;a<r.size;++a){let s=r.indexToLoc(a).slice(),i=s[0],o=s[2],l=t.locToIndex([i,o]);s[2]=t.values[l];let c=e.locToIndex(s);r.values[a]=e.values[c]}return r}var gx=Rt((e,t)=>e>t?1:0),fR=Ht(so,gx,null,"bool"),mR={kernelName:so,backendName:"cpu",kernelFunc:fR},xx=Rt((e,t)=>e<t?1:0),AR=Ht(uo,xx,null,"bool"),yR={kernelName:uo,backendName:"cpu",kernelFunc:AR};function wx(e,t,n){let r=(t-e)/(n-1),a=k.makeZerosTypedArray(n,"float32");a[0]=e;for(let s=1;s<a.length;s++)a[s]=a[s-1]+r;return a}var _x=cl(e=>Math.log(e)),gR=hl(fs,_x),xR={kernelName:fs,backendName:"cpu",kernelFunc:gR};function bx(e,t,n,r){let a=k.getTypedArrayFromDType(r,k.sizeFromShape(n));for(let s=0;s<a.length;++s){let i=s*t,o=e[i];for(let l=0;l<t;++l){let c=e[i+l];c>o&&(o=c)}a[s]=o}return a}var vx=Rt((e,t)=>Math.max(e,t)),wR=Ht(As,vx),_R={kernelName:As,backendName:"cpu",kernelFunc:wR},kx=Rt((e,t)=>Math.min(e,t)),bR=Ht(ws,kx),vR={kernelName:ws,backendName:"cpu",kernelFunc:bR},oA=Rt((e,t)=>e*t),kR=cA((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),hA=Ht(_s,oA,kR),IR={kernelName:_s,backendName:"cpu",kernelFunc:hA};function Ix(e,t,n){let r=k.createScalarValue(-1,n);return oA([],t,r,e,n)}function NR(e){let{inputs:t,backend:n}=e,{x:r}=t;ve(r,"neg");let a=n.data.get(r.dataId).values,[s,i]=Ix(a,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,s)}var SR={kernelName:mo,backendName:"cpu",kernelFunc:NR},Nx=Rt((e,t)=>e!==t?1:0),TR=Ht(Ao,Nx,null,"bool"),ER={kernelName:Ao,backendName:"cpu",kernelFunc:TR};function lA(e,t,n,r,a){let s=t.length,i=k.sizeFromShape(t),o=k.computeStrides(t),l=k.computeStrides(a),c=k.getTypedArrayFromDType(n,k.sizeFromShape(a));for(let u=0;u<i;++u){let h=k.indexToLoc(u,s,o),d=new Array(h.length);for(let f=0;f<d.length;f++)d[f]=h[r[f]];let p=k.locToIndex(d,s,l);c[p]=e[u]}return c}function ar(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{perm:s}=n;ve(a,"transpose");let i=a.shape.length,o=new Array(i);for(let u=0;u<o.length;u++)o[u]=a.shape[s[u]];let l=r.data.get(a.dataId).values,c=lA(l,a.shape,a.dtype,s,o);return{dataId:r.write(c,o,a.dtype),shape:o,dtype:a.dtype}}var CR={kernelName:Ws,backendName:"cpu",kernelFunc:ar};function Sx(e,t,n,r){let[a,s]=C.computeOutAndReduceShapes(e,r),i=Jn(t,"int32"),o=k.makeZerosTypedArray(k.sizeFromShape(a),i),l=k.sizeFromShape(s);for(let c=0;c<o.length;++c){let u=c*l,h=1;for(let d=0;d<l;++d)h*=n[u+d];o[c]=h}return{outVals:o,outShape:a,outDtype:i}}function RR(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;ve(a,"prod");let o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=C.getAxesPermutation(l,o),u=l,h=a,d=[];c!=null&&(h=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),d.push(h),u=C.getInnerMostAxes(u.length,o));let p=n.data.get(h.dataId).values,{outVals:f,outShape:m,outDtype:A}=Sx(h.shape,h.dtype,p,u),y=m;return i&&(y=C.expandShapeToKeepDim(m,l)),d.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(y,A,f)}var FR={kernelName:bo,backendName:"cpu",kernelFunc:RR};function uA(e,t,n,r){let a=e===t,s=e<t&&n<0,i=t<e&&n>1;if(a||s||i)return k.makeZerosTypedArray(0,r);let o=Math.abs(Math.ceil((t-e)/n)),l=k.makeZerosTypedArray(o,r);t<e&&n===1&&(n=-1),l[0]=e;for(let c=1;c<l.length;c++)l[c]=l[c-1]+n;return l}var Tx=cl(e=>1/Math.sqrt(e)),MR=hl(Rs,Tx),$R={kernelName:Rs,backendName:"cpu",kernelFunc:MR};function Kd(e,t,n,r,a){let s=rn.isSliceContinous(r,t,n),i=k.sizeFromShape(n),o=k.computeStrides(r);if(s){let h=rn.computeFlatOffset(t,o);return a==="string"?e.slice(h,h+i):e.subarray(h,h+i)}let l=a==="string"?C.fromUint8ToStringArray(e):e,c=We(r,a,l),u=We(n,a);for(let h=0;h<u.size;++h){let d=u.indexToLoc(h),p=d.map((f,m)=>f+t[m]);u.set(c.get(...p),...d)}return a==="string"?C.fromStringArrayToUint8(u.values):u.values}function si(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r;ve(a,"slice");let[o,l]=rn.parseSliceParams(a,s,i);rn.assertParamsValid(a,o,l);let c=n.data.get(a.dataId).values,u=Kd(c,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,u)}var DR={kernelName:To,backendName:"cpu",kernelFunc:si},Ex=Rt((e,t)=>{let n=e-t;return n*n}),OR=Ht(zs,Ex),zR={kernelName:zs,backendName:"cpu",kernelFunc:OR};function Cx(e,t,n,r){let a=We(e,t.dtype);for(let s=0;s<a.size;s++){let i=a.indexToLoc(s),o=new Array(i.length);for(let l=0;l<o.length;l++)o[l]=i[l]*n[l]+r[l];a.set(t.get(...o),...i)}return a}var Rx=Rt((e,t)=>e-t),PR=cA((e,t,n,r)=>({real:e-n,imag:t-r})),dA=Ht(Ps,Rx,PR),LR={kernelName:Ps,backendName:"cpu",kernelFunc:dA};function Fx(e,t){let n=new Array(e.rank);for(let a=0;a<n.length;a++)n[a]=e.shape[a]*t[a];let r=We(n,e.dtype);for(let a=0;a<r.values.length;++a){let s=r.indexToLoc(a),i=new Array(e.rank);for(let l=0;l<i.length;l++)i[l]=s[l]%e.shape[l];let o=e.locToIndex(i);r.values[a]=e.values[o]}return r}function Mx(e,t,n,r,a){let s=t[t.length-1],[i,o]=[e.length/s,s],l=k.getTypedArrayFromDType(n,i*r),c=k.getTypedArrayFromDType("int32",i*r);for(let h=0;h<i;h++){let d=h*o,p=e.subarray(d,d+o),f=[];for(let g=0;g<p.length;g++)f.push({value:p[g],index:g});f.sort((g,b)=>b.value-g.value);let m=h*r,A=l.subarray(m,m+r),y=c.subarray(m,m+r);for(let g=0;g<r;g++)A[g]=f[g].value,y[g]=f[g].index}let u=t.slice();return u[u.length-1]=r,[We(u,n,l),We(u,"int32",c)]}function $x(e,t,n,r){let a=k.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let f=0;f<a;f++)s[0]*=n[f];s[1]=n[a];for(let f=a+1;f<n.length;f++)s[2]*=n[f];let i={},o=new Int32Array(n[a]),l=new Mt(s,r,e),c=[],u=s[0]===1&&s[2]===1;for(let f=0;f<n[a];f++){let m;if(u)m=e[f].toString();else{let A=[];for(let y=0;y<s[0];y++)for(let g=0;g<s[2];g++)A.push(l.get(y,f,g));m=A.join(",")}if(i[m]!==void 0)o[f]=i[m];else{let A=Object.keys(i).length;i[m]=A,o[f]=A,c.push(f)}}let h=s.slice();h[1]=Object.keys(i).length;let d=new Mt(h,r);c.forEach((f,m)=>{for(let A=0;A<s[0];A++)for(let y=0;y<s[2];y++)d.set(l.get(A,f,y),A,m,y)});let p=n.slice();return p[a]=h[1],{outputValues:d.values,outputShape:p,indices:o}}var _0="3.1.0";vu("cpu",()=>new Fd,1);var Ox=st(Ji,e=>e>=0?e:Math.exp(e)-1),WR={kernelName:Ji,backendName:"cpu",kernelFunc:Ox};function zx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r;ve([a],"leakyRelu");let i=k.sizeFromShape(a.shape),o=n.data.get(a.dataId).values,l=k.getTypedArrayFromDType("float32",i);for(let c=0;c<o.length;c++)l[c]=o[c]<0?s*o[c]:o[c];return n.makeTensorInfo(a.shape,"float32",l)}var BR={kernelName:ps,backendName:"cpu",kernelFunc:zx},VR=Rt((e,t)=>e<0?t*e:e);function Px(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t;ve([r,a],"prelu");let s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,[o,l]=VR(r.shape,a.shape,s,i,r.dtype);return n.makeTensorInfo(l,r.dtype,o)}var UR={kernelName:Is,backendName:"cpu",kernelFunc:Px},Lx=st(Ns,e=>Math.max(0,e)),HR={kernelName:Ns,backendName:"cpu",kernelFunc:Lx},Wx=st(Ts,e=>Math.min(Math.max(0,e),6)),jR={kernelName:Ts,backendName:"cpu",kernelFunc:Wx};function pA(e,t,n,r,a){if(n==="linear")return Pr({inputs:{x:t},backend:e});if(n==="relu")return Lx({inputs:{x:t},backend:e});if(n==="elu")return Ox({inputs:{x:t},backend:e});if(n==="relu6")return Wx({inputs:{x:t},backend:e});if(n==="prelu")return Px({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return zx({inputs:{x:t},backend:e,attrs:{alpha:a}});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function yt(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=k.sizeFromShape(a.shape),o=k.inferFromImplicitShape(s,i),l=k.sizeFromShape(o);k.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${a.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),n.incRef(a.dataId);let c=n.data.get(a.dataId);if(c.complexTensorInfos!=null){let u=c.complexTensorInfos.real,h=c.complexTensorInfos.imag;u.shape=o,h.shape=o}return{dataId:a.dataId,shape:o,dtype:a.dtype}}var GR={kernelName:ko,backendName:"cpu",kernelFunc:yt};function Bx(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;ve([a,s],"matMul");let l=a.shape.length,c=s.shape.length,u=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[c-1]:s.shape[c-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[c-2]:s.shape[c-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=k.sizeFromShape(f),y=k.sizeFromShape(m),g=A===y||A===1||y===1;k.assert(l>=2&&c>=2&&g,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let b=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);k.assert(u===h,()=>`Error in matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[A,u,d]:[A,d,u],w=o?[y,p,h]:[y,h,p],_=yt({inputs:{x:a},backend:n,attrs:{shape:x}}),N=yt({inputs:{x:s},backend:n,attrs:{shape:w}}),T=i?_.shape[1]:_.shape[2],E=i?_.shape[2]:_.shape[1],M=o?N.shape[1]:N.shape[2],z=Math.max(A,y),P=n.data.get(_.dataId).values,B=n.data.get(N.dataId).values,G=k.computeStrides(_.shape),V=k.computeStrides(N.shape),[K,X,ee]=i?[G[0],1,G[1]]:[G[0],G[1],1],[J,ae,Y]=o?[1,V[1],V[0]]:[V[1],1,V[0]],ue=E*M,ne=We([z,E,M],_.dtype),de=ne.values,he=n.blockSize;for(let me=0;me<z;me++)for(let Ae=0;Ae<E;Ae+=he)for(let ke=0;ke<M;ke+=he)for(let Ee=0;Ee<T;Ee+=he){let Ce=Math.min(Ae+he,E),Oe=Math.min(ke+he,M),Ke=Math.min(Ee+he,T);for(let Ve=Ae;Ve<Ce;Ve++)for(let rt=ke;rt<Oe;rt++){let it=0;for(let je=Ee;je<Ke;je++){let lt=Math.min(me,A-1)*K,ut=Math.min(me,y-1)*Y,Dn=P[lt+Ve*X+je*ee],Ye=B[je*J+rt*ae+ut];it+=Dn*Ye}de[me*ue+(Ve*M+rt)]+=it}}return n.disposeIntermediateTensorInfo(_),n.disposeIntermediateTensorInfo(N),n.makeTensorInfo(b,ne.dtype,ne.values)}var qR={kernelName:Ya,backendName:"cpu",kernelFunc:Bx};function XR(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r,d,p,f,m=[];d=Bx({inputs:{a,b:s},attrs:{transposeA:l,transposeB:c},backend:n}),i&&(p=nc({inputs:{a:d,b:i},backend:n}),m.push(d),d=p),u&&(f=pA(n,d,u,o,h),m.push(d),d=f);for(let A of m)n.disposeIntermediateTensorInfo(A);return d}var KR={kernelName:Bs,backendName:"cpu",kernelFunc:XR},ZR=st(Wi,e=>Math.acos(e)),JR={kernelName:Wi,backendName:"cpu",kernelFunc:ZR},YR=st(Bi,e=>Math.acosh(e)),QR={kernelName:Bi,backendName:"cpu",kernelFunc:YR};function eF(e){let{inputs:t,backend:n}=e,r=t;ve(t,"addN");let a=r.map(o=>n.data.get(o.dataId).values),s=We(r[0].shape,r[0].dtype),i=s.values;for(let o=0;o<r.length;o++){let l=a[o];for(let c=0;c<i.length;c++)i[c]+=l[c]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}var tF={kernelName:Ka,backendName:"cpu",kernelFunc:eF};function nF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;ve(a,"all");let o=k.parseAxisParam(s,a.shape),l=o,c=C.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=C.getInnerMostAxes(l.length,a.shape.length)),C.assertAxesAreInnerMostDims("all",l,u.shape.length);let[h,d]=C.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,b=m[g];for(let x=0;x<p;++x){let w=m[g+x];b=b&&w}f[y]=b}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=C.expandShapeToKeepDim(h,o),g=yt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var rF={kernelName:Ah,backendName:"cpu",kernelFunc:nF};function aF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;ve(a,"any");let o=k.parseAxisParam(s,a.shape),l=o,c=C.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=C.getInnerMostAxes(l.length,a.shape.length)),C.assertAxesAreInnerMostDims("any",l,u.shape.length);let[h,d]=C.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,b=m[g];for(let x=0;x<p;++x){let w=m[g+x];b=b||w}f[y]=b}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=C.expandShapeToKeepDim(h,o),g=yt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var sF={kernelName:yh,backendName:"cpu",kernelFunc:aF};function iF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;ve(a,"argMax");let i=k.parseAxisParam(s,a.shape),o=C.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=ar({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[u,h]=C.computeOutAndReduceShapes(l.shape,i),d=k.sizeFromShape(u),p=k.makeZerosTypedArray(d,"int32"),f=k.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],b=0;for(let x=0;x<f;++x){let w=m[y+x];w>g&&(g=w,b=x)}p[A]=b}return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(u,"int32",p)}var oF={kernelName:Za,backendName:"cpu",kernelFunc:iF};function lF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;ve(a,"argMin");let i=k.parseAxisParam(s,a.shape),o=C.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=ar({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[u,h]=C.computeOutAndReduceShapes(l.shape,i),d=k.sizeFromShape(u),p=k.makeZerosTypedArray(d,"int32"),f=k.sizeFromShape(h),m=n.data.get(l.dataId).values;for(let A=0;A<p.length;++A){let y=A*f,g=m[y],b=0;for(let x=0;x<f;++x){let w=m[y+x];w<g&&(g=w,b=x)}p[A]=b}return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),n.makeTensorInfo(u,"int32",p)}var uF={kernelName:ru,backendName:"cpu",kernelFunc:lF},cF=st(Vi,e=>Math.asin(e)),hF={kernelName:Vi,backendName:"cpu",kernelFunc:cF},dF=st(Ui,e=>Math.asinh(e)),pF={kernelName:Ui,backendName:"cpu",kernelFunc:dF},fF=st(Hi,e=>Math.atan(e)),mF={kernelName:Hi,backendName:"cpu",kernelFunc:fF},AF=Rt((e,t)=>Math.atan2(e,t)),yF=Ht(Gi,AF),gF={kernelName:Gi,backendName:"cpu",kernelFunc:yF},xF=st(ji,e=>Math.atanh(e)),wF={kernelName:ji,backendName:"cpu",kernelFunc:xF};function fA(e,t,n,r,a,s){let i=a.strideHeight,o=a.strideWidth,l=a.dilationHeight,c=a.dilationWidth,u=a.effectiveFilterHeight,h=a.effectiveFilterWidth,d=a.padInfo.top,p=a.padInfo.left,f=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=We(a.outShape,n),A=m.values,y=a.outShape[1]*a.outShape[2]*a.outShape[3],g=a.outShape[2]*a.outShape[3],b=a.outShape[3];for(let x=0;x<a.batchSize;++x){let w=x*y,_=x*r[0];for(let N=0;N<a.inChannels;++N)for(let T=0;T<a.outHeight;++T){let E=T*i-d,M=Math.max(0,E),z=Math.min(a.inHeight,u+E),P=w+T*g;for(let B=0;B<a.outWidth;++B){let G=B*o-p,V=Math.max(0,G),K=Math.min(a.inWidth,h+G),X=f,ee=0,J=0;for(let Y=M;Y<z;Y+=l){let ue=_+Y*r[1];for(let ne=V;ne<K;ne+=c){let de=ue+ne*r[2],he=e[de+N];s==="max"&&he>X?X=he:s==="avg"&&(ee+=he,J++)}if(isNaN(X))break}let ae=P+B*b+N;A[ae]=s==="avg"?ee/J:X}}}return m}function Vx(e,t,n,r,a=!1,s=!1){let i=We(r.outShape,"int32"),o=r.strideHeight,l=r.strideWidth,c=r.dilationHeight,u=r.dilationWidth,h=r.effectiveFilterHeight,d=r.effectiveFilterWidth,p=r.padInfo.top,f=r.padInfo.left,m=We(t,n,e);for(let A=0;A<r.batchSize;++A)for(let y=0;y<r.inChannels;++y)for(let g=0;g<r.outHeight;++g){let b=g*o-p,x=b;for(;x<0;)x+=c;let w=Math.min(r.inHeight,h+b);for(let _=0;_<r.outWidth;++_){let N=_*l-f,T=N;for(;T<0;)T+=u;let E=Math.min(r.inWidth,d+N),M=Number.NEGATIVE_INFINITY,z=-1;for(let P=x;P<w;P+=c){let B=P-b;for(let G=T;G<E;G+=u){let V=G-N,K=m.get(A,P,G,y);K>M&&(M=K,a?z=s?((A*r.inHeight+P)*r.inWidth+G)*r.inChannels+y:(P*r.inWidth+G)*r.inChannels+y:z=B*d+V)}}i.set(z,A,g,_,y)}}return i}function Ux(e,t,n,r,a,s){let i=a.strideDepth,o=a.strideHeight,l=a.strideWidth,c=a.dilationDepth,u=a.dilationHeight,h=a.dilationWidth,d=a.effectiveFilterDepth,p=a.effectiveFilterHeight,f=a.effectiveFilterWidth,m=a.padInfo.front,A=a.padInfo.top,y=a.padInfo.left,g=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,b=We(a.outShape,n),x=b.values,w=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],_=a.outShape[2]*a.outShape[3]*a.outShape[4],N=a.outShape[3]*a.outShape[4],T=a.outShape[4];for(let E=0;E<a.batchSize;++E){let M=E*w,z=E*r[0];for(let P=0;P<a.inChannels;++P)for(let B=0;B<a.outDepth;++B){let G=B*i-m,V=G;for(;V<0;)V+=c;let K=Math.min(a.inDepth,d+G),X=M+B*_;for(let ee=0;ee<a.outHeight;++ee){let J=ee*o-A,ae=J;for(;ae<0;)ae+=u;let Y=Math.min(a.inHeight,p+J),ue=X+ee*N;for(let ne=0;ne<a.outWidth;++ne){let de=ne*l-y,he=de;for(;he<0;)he+=h;let me=Math.min(a.inWidth,f+de),Ae=ue+ne*T,ke=g,Ee=0,Ce=0;for(let Ke=V;Ke<K;Ke+=c){let Ve=z+Ke*r[1];for(let rt=ae;rt<Y;rt+=u){let it=Ve+rt*r[2];for(let je=he;je<me;je+=h){let lt=it+je*r[3],ut=e[lt+P];if(s==="max"&&ut>ke?ke=ut:s==="avg"&&(Ee+=ut,Ce++),isNaN(ke))break}if(isNaN(ke))break}if(isNaN(ke))break}let Oe=Ae+P;x[Oe]=s==="avg"?Ee/Ce:ke}}}}return b}function _F(e,t){let n=We(t.outShape,"int32"),r=t.strideDepth,a=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,c=t.effectiveFilterDepth,u=t.effectiveFilterHeight,h=t.effectiveFilterWidth,d=t.padInfo.front,p=t.padInfo.top,f=t.padInfo.left;for(let m=0;m<t.batchSize;++m)for(let A=0;A<t.inChannels;++A)for(let y=0;y<t.outDepth;++y){let g=y*r-d,b=g;for(;b<0;)b+=i;let x=Math.min(t.inDepth,c+g);for(let w=0;w<t.outHeight;++w){let _=w*a-p,N=_;for(;N<0;)N+=o;let T=Math.min(t.inHeight,u+_);for(let E=0;E<t.outWidth;++E){let M=E*s-f,z=M;for(;z<0;)z+=l;let P=Math.min(t.inWidth,h+M),B=Number.NEGATIVE_INFINITY,G=-1;for(let V=b;V<x;V+=i){let K=V-g;for(let X=N;X<T;X+=o){let ee=X-_;for(let J=z;J<P;J+=l){let ae=J-M,Y=e.get(m,V,X,J,A);Y>=B&&(B=Y,G=K*u*h+ee*u+ae)}}}n.set(G,m,y,w,E,A)}}}return n}function bF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;ve(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(C.eitherStridesOrDilationsAreOne(i,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=C.computePool2DInfo(a.shape,s,i,c,o,l),h;if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))h=Pr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=k.computeStrides(a.shape),f=fA(d,a.shape,a.dtype,p,u,"avg");h=n.makeTensorInfo(u.outShape,a.dtype,f.values)}return h}var vF={kernelName:Ja,backendName:"cpu",kernelFunc:bF};function kF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c}=r;ve(a,"avgPool3d");let u=C.computePool3DInfo(a.shape,s,i,1,o,l,c),h=n.data.get(a.dataId).values,d=Ux(h,a.shape,a.dtype,k.computeStrides(a.shape),u,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var IF={kernelName:au,backendName:"cpu",kernelFunc:kF};function NF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=r;ve([a,s],"avgPool3DGrad");let u=C.computePool3DInfo(s.shape,i,o,1,l,c),h=u.strideDepth,d=u.strideHeight,p=u.strideWidth,f=u.filterDepth,m=u.filterHeight,A=u.filterWidth,y=u.dilationDepth,g=u.dilationHeight,b=u.dilationWidth,x=u.effectiveFilterDepth,w=u.effectiveFilterHeight,_=u.effectiveFilterWidth,N=x-1-u.padInfo.front,T=_-1-u.padInfo.left,E=w-1-u.padInfo.top,M=We(s.shape,"float32"),z=1/(f*m*A),P=n.bufferSync(a);for(let B=0;B<u.batchSize;++B)for(let G=0;G<u.inChannels;++G)for(let V=0;V<u.inDepth;++V)for(let K=0;K<u.inHeight;++K)for(let X=0;X<u.inWidth;++X){let ee=V-N,J=K-E,ae=X-T,Y=0;for(let ue=0;ue<x;ue+=y){let ne=(ee+ue)/h;if(!(ne<0||ne>=u.outDepth||Math.floor(ne)!==ne))for(let de=0;de<w;de+=g){let he=(J+de)/d;if(!(he<0||he>=u.outHeight||Math.floor(he)!==he))for(let me=0;me<_;me+=b){let Ae=(ae+me)/p;Ae<0||Ae>=u.outWidth||Math.floor(Ae)!==Ae||(Y+=P.get(B,ne,he,Ae,G))}}}M.set(Y*z,B,V,K,X,G)}return n.makeTensorInfo(M.shape,M.dtype,M.values)}var SF={kernelName:xh,backendName:"cpu",kernelFunc:NF};function TF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;ve([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:c}=r,u=C.computePool2DInfo(i.shape,o,l,1,c),h=u.strideHeight,d=u.strideWidth,p=u.filterHeight,f=u.filterWidth,m=u.dilationHeight,A=u.dilationWidth,y=u.effectiveFilterHeight,g=u.effectiveFilterWidth,b=g-1-u.padInfo.left,x=y-1-u.padInfo.top,w=We(i.shape,"float32"),_=1/(p*f),N=n.data.get(a.dataId).values,T=We(a.shape,"float32",N);for(let E=0;E<u.batchSize;++E)for(let M=0;M<u.inChannels;++M)for(let z=0;z<u.inHeight;++z)for(let P=0;P<u.inWidth;++P){let B=z-x,G=P-b,V=0;for(let K=0;K<y;K+=m){let X=(B+K)/h;if(!(X<0||X>=u.outHeight||Math.floor(X)!==X))for(let ee=0;ee<g;ee+=A){let J=(G+ee)/d;J<0||J>=u.outWidth||Math.floor(J)!==J||(V+=T.get(E,X,J,M))}}w.set(V*_,E,z,P,M)}return n.makeTensorInfo(w.shape,w.dtype,w.values)}var EF={kernelName:gh,backendName:"cpu",kernelFunc:TF};function CF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,scale:s,offset:i,mean:o,variance:l}=t;k.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),ve([a,o,l,s,i],"batchNorm");let{varianceEpsilon:c}=r;c==null&&(c=.001);let u=n.data.get(a.dataId).values,h=n.data.get(o.dataId).values,d=n.data.get(l.dataId).values,p=s?n.data.get(s.dataId).values:new Float32Array([1]),f=i?n.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(u.length),A=f.length,y=p.length,g=d.length,b=h.length,x=0,w=0,_=0,N=0;for(let T=0;T<u.length;++T)m[T]=f[x++]+(u[T]-h[w++])*p[_++]/Math.sqrt(d[N++]+c),x>=A&&(x=0),w>=b&&(w=0),_>=y&&(_=0),N>=g&&(N=0);return n.makeTensorInfo(a.shape,a.dtype,m)}var RF={kernelName:cs,backendName:"cpu",kernelFunc:CF};function FF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;ve([a],"batchToSpaceND");let o=s.reduce((y,g)=>y*g),l=C.getReshaped(a.shape,s,o),c=C.getPermuted(l.length,s.length),u=C.getReshapedPermuted(a.shape,s,o),h=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(u,i,s.length),p=yt({inputs:{x:a},backend:n,attrs:{shape:l}}),f=ar({inputs:{x:p},backend:n,attrs:{perm:c}}),m=yt({inputs:{x:f},backend:n,attrs:{shape:u}}),A=si({inputs:{x:m},backend:n,attrs:{begin:h,size:d}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var MF={kernelName:su,backendName:"cpu",kernelFunc:FF};function $F(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,c=sA(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}var DF={kernelName:wh,backendName:"cpu",kernelFunc:$F},OF=st(ma,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),zF={kernelName:ma,backendName:"cpu",kernelFunc:OF},PF=e=>{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(k.sizeFromShape(t.shape)),a=n.data.get(t.dataId),s=a.complexTensorInfos.real,i=a.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let c=0;c<o.length;c++){let u=o[c],h=l[c];r[c]=Math.hypot(u,h)}return n.makeOutput(r,t.shape,"float32")},LF={kernelName:iu,backendName:"cpu",kernelFunc:PF};function dl(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.imag,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var WF={kernelName:$h,backendName:"cpu",kernelFunc:dl};function pl(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=k.parseAxisParam(a,t[0].shape)[0],i=C.computeOutShape(t.map(m=>m.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(m=>k.sizeFromShape(m.shape)>0);if(o.length===1)return Pr({inputs:{x:o[0]},backend:n});let l=o.map(m=>m.shape);if(C.assertParamsConsistent(l,s),o[0].dtype==="complex64"){let m=o.map(x=>ai({inputs:{input:x},backend:n})),A=o.map(x=>dl({inputs:{input:x},backend:n})),y=pl({inputs:m,backend:n,attrs:{axis:s}}),g=pl({inputs:A,backend:n,attrs:{axis:s}}),b=Tn({inputs:{real:y,imag:g},backend:n});return m.forEach(x=>n.disposeIntermediateTensorInfo(x)),A.forEach(x=>n.disposeIntermediateTensorInfo(x)),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),b}let c=o.map(m=>{let A=k.sizeFromShape(m.shape.slice(s));return yt({inputs:{x:m},backend:n,attrs:{shape:[-1,A]}})}),u=c.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));i=C.computeOutShape(c.map(m=>m.shape),1);let h=c[0].shape[0]===1,d=iA(u,i,t[0].dtype,h),p=C.computeOutShape(o.map(m=>m.shape),s),f=n.makeTensorInfo(p,t[0].dtype,d);return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var BF={kernelName:qi,backendName:"cpu",kernelFunc:pl};function Hx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:c,dimRoundingMode:u}=r;ve([a,s],"conv2d");let h=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(a.shape,s.shape,i,c,o,u,!1,h),p=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,A=d.dilationWidth,y=d.padInfo.left,g=d.padInfo.top,b=d.dataFormat==="channelsLast",x=new Mt(d.outShape,a.dtype),w=k.computeStrides(a.shape),_=k.computeStrides(s.shape),N=w[0],T=b?w[1]:w[2],E=b?w[2]:1,M=b?1:w[1],z=x.strides[0],P=b?x.strides[1]:x.strides[2],B=b?x.strides[2]:1,G=b?1:x.strides[1],V=n.data.get(a.dataId).values,K=n.data.get(s.dataId).values,X=x.values;for(let ee=0;ee<d.batchSize;++ee){let J=ee*N,ae=ee*z;for(let Y=0;Y<d.outHeight;++Y){let ue=ae+Y*P,ne=Y*d.strideHeight-g;for(let de=0;de<p;++de){let he=ne+de*m;if(he<0||he>=d.inHeight)continue;let me=de*_[0],Ae=J+he*T;for(let ke=0;ke<d.outWidth;++ke){let Ee=ue+ke*B,Ce=ke*d.strideWidth-y;for(let Oe=0;Oe<f;++Oe){let Ke=Ce+Oe*A;if(Ke<0||Ke>=d.inWidth)continue;let Ve=me+Oe*_[1],rt=Ae+Ke*E,it=Ve;for(let je=0;je<d.inChannels;++je){let lt=V[rt+je*M];for(let ut=0;ut<d.outChannels;++ut)X[Ee+ut*G]+=lt*K[it+ut];it+=d.outChannels}}}}}}return n.makeTensorInfo(x.shape,x.dtype,X)}var VF={kernelName:ts,backendName:"cpu",kernelFunc:Hx};function UF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,filterShape:u}=r;ve([a,s],"conv2dBackpropFilter");let h=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(a.shape,u,i,1,o,c,!1,h),{strideHeight:p,strideWidth:f,filterHeight:m,filterWidth:A}=d,y=d.dataFormat==="channelsLast",g=new Mt(d.filterShape,"float32"),b=d.padInfo.left,x=d.padInfo.top,w=n.data.get(a.dataId).values,_=n.data.get(s.dataId).values,N=new Mt(a.shape,a.dtype,w),T=new Mt(s.shape,s.dtype,_);for(let E=0;E<m;++E){let M=Math.max(0,Math.ceil((x-E)/p)),z=Math.min(d.outHeight,(d.inHeight+x-E)/p);for(let P=0;P<A;++P){let B=Math.max(0,Math.ceil((b-P)/f)),G=Math.min(d.outWidth,(d.inWidth+b-P)/f);for(let V=0;V<d.inChannels;++V)for(let K=0;K<d.outChannels;++K){let X=0;for(let ee=0;ee<d.batchSize;++ee)for(let J=M;J<z;++J){let ae=E+J*p-x;for(let Y=B;Y<G;++Y){let ue=P+Y*f-b;y?X+=N.get(ee,ae,ue,V)*T.get(ee,J,Y,K):X+=N.get(ee,V,ae,ue)*T.get(ee,K,J,Y)}}g.set(X,E,P,V,K)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var HF={kernelName:bh,backendName:"cpu",kernelFunc:UF};function jF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:c,dimRoundingMode:u}=r;ve([a,s],"conv2dBackpropInput");let h=k.computeStrides(s.shape),d=k.computeStrides(a.shape),p=C.convertConv2DDataFormat(c),f=C.computeConv2DInfo(i,s.shape,o,1,l,u,!1,p),m=new Mt(f.inShape,"float32"),A=m.values,y=n.data.get(a.dataId).values,g=n.data.get(s.dataId).values,[b,x,w]=h,{batchSize:_,filterHeight:N,filterWidth:T,inChannels:E,inHeight:M,inWidth:z,outChannels:P,outHeight:B,outWidth:G,strideHeight:V,strideWidth:K}=f;p=f.dataFormat;let X=N-1-f.padInfo.top,ee=T-1-f.padInfo.left,J=p==="channelsLast",ae=m.strides[0],Y=J?m.strides[1]:m.strides[2],ue=J?m.strides[2]:1,ne=J?1:m.strides[1],de=d[0],he=J?d[1]:d[2],me=J?d[2]:1,Ae=J?1:d[1];for(let ke=0;ke<_;++ke)for(let Ee=0;Ee<E;++Ee)for(let Ce=0;Ce<M;++Ce){let Oe=Ce-X,Ke=Math.max(0,Math.ceil(Oe/V)),Ve=Math.min(B,(N+Oe)/V);for(let rt=0;rt<z;++rt){let it=rt-ee,je=Math.max(0,Math.ceil(it/K)),lt=Math.min(G,(T+it)/K),ut=0;for(let Ye=Ke;Ye<Ve;++Ye){let wn=Ye*V-Oe;for(let qt=je;qt<lt;++qt){let _n=qt*K-it,jn=de*ke+he*Ye+me*qt,hn=b*(N-1-wn)+x*(T-1-_n)+w*Ee;for(let nn=0;nn<P;++nn){let Gn=y[jn+Ae*nn],vr=g[hn+nn];ut+=Gn*vr}}}let Dn=ae*ke+Y*Ce+ue*rt+ne*Ee;A[Dn]=ut}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var GF={kernelName:ns,backendName:"cpu",kernelFunc:jF};function qF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;ve([a,s],"conv3d");let c=C.computeConv3DInfo(a.shape,s.shape,i,l,o),{filterDepth:u,filterHeight:h,filterWidth:d,dilationDepth:p,dilationHeight:f,dilationWidth:m,padInfo:A}=c,y=A.front,g=A.left,b=A.top,x=new Mt(c.outShape,a.dtype),w=n.data.get(a.dataId).values,_=n.data.get(s.dataId).values,N=x.values,T=k.computeStrides(a.shape),E=k.computeStrides(s.shape);for(let M=0;M<c.batchSize;++M){let z=M*T[0],P=M*x.strides[0];for(let B=0;B<c.outDepth;++B){let G=P+B*x.strides[1],V=B*c.strideDepth-y;for(let K=0;K<u;++K){let X=V+K*p;if(X<0||X>=c.inDepth)continue;let ee=K*E[0],J=z+X*T[1];for(let ae=0;ae<c.outHeight;++ae){let Y=G+ae*x.strides[2],ue=ae*c.strideHeight-b;for(let ne=0;ne<h;++ne){let de=ue+ne*f;if(de<0||de>=c.inHeight)continue;let he=ee+ne*E[1],me=J+de*T[2];for(let Ae=0;Ae<c.outWidth;++Ae){let ke=Y+Ae*c.outChannels,Ee=Ae*c.strideWidth-g;for(let Ce=0;Ce<d;++Ce){let Oe=Ee+Ce*m;if(Oe<0||Oe>=c.inWidth)continue;let Ke=he+Ce*E[2],Ve=me+Oe*c.inChannels,rt=Ke;for(let it=0;it<c.inChannels;++it){let je=w[Ve+it];for(let lt=0;lt<c.outChannels;++lt)N[ke+lt]+=je*_[rt+lt];rt+=c.outChannels}}}}}}}}return n.makeTensorInfo(x.shape,x.dtype,x.values)}var XF={kernelName:ou,backendName:"cpu",kernelFunc:qF};function KF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r;ve([a,s],"conv3dBackpropFilterV2");let c=k.computeStrides(a.shape),u=k.computeStrides(s.shape),h=C.computeConv3DInfo(a.shape,l,i,1,o),d=h.strideDepth,p=h.strideHeight,f=h.strideWidth,m=h.filterDepth,A=h.filterHeight,y=h.filterWidth,g=new Mt(h.filterShape,"float32"),b=g.values,[x,w,_,N]=g.strides,T=n.data.get(s.dataId).values,[E,M,z,P]=u,B=n.data.get(a.dataId).values,[G,V,K,X]=c,ee=h.padInfo.front,J=h.padInfo.left,ae=h.padInfo.top;for(let Y=0;Y<m;++Y){let ue=Math.max(0,Math.ceil((ee-Y)/d)),ne=Math.min(h.outDepth,(h.inDepth+ee-Y)/d),de=Y*x;for(let he=0;he<A;++he){let me=Math.max(0,Math.ceil((ae-he)/p)),Ae=Math.min(h.outHeight,(h.inHeight+ae-he)/p),ke=he*w+de;for(let Ee=0;Ee<y;++Ee){let Ce=Math.max(0,Math.ceil((J-Ee)/f)),Oe=Math.min(h.outWidth,(h.inWidth+J-Ee)/f),Ke=Ee*_+ke;for(let Ve=0;Ve<h.inChannels;++Ve){let rt=Ve*N+Ke;for(let it=0;it<h.outChannels;++it){let je=0;for(let lt=0;lt<h.batchSize;++lt){let ut=lt*G,Dn=lt*E;for(let Ye=ue;Ye<ne;++Ye){let wn=(Y+Ye*d-ee)*V+ut,qt=Ye*M+Dn;for(let _n=me;_n<Ae;++_n){let jn=(he+_n*p-ae)*K+wn,hn=_n*z+qt;for(let nn=Ce;nn<Oe;++nn){let Gn=(Ee+nn*f-J)*X+jn,vr=nn*P+hn;je+=B[Gn+Ve]*T[vr+it]}}}}b[rt+it]=je}}}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var ZF={kernelName:vh,backendName:"cpu",kernelFunc:KF};function JF(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r;ve([a],"conv3dBackpropInputV2");let c=k.computeStrides(a.shape),u=k.computeStrides(s.shape),h=C.computeConv3DInfo(l,s.shape,o,1,i),d=new Mt(h.inShape,"float32"),p=d.values,[f,m,A,y]=d.strides,g=n.data.get(a.dataId).values,[b,x,w,_]=c,N=n.data.get(s.dataId).values,[T,E,M,z]=u,{batchSize:P,filterDepth:B,filterHeight:G,filterWidth:V,inChannels:K,inDepth:X,inHeight:ee,inWidth:J,outChannels:ae,outDepth:Y,outHeight:ue,outWidth:ne,strideDepth:de,strideHeight:he,strideWidth:me}=h,Ae=B-1-h.padInfo.front,ke=G-1-h.padInfo.top,Ee=V-1-h.padInfo.left;for(let Ce=0;Ce<P;++Ce)for(let Oe=0;Oe<K;++Oe)for(let Ke=0;Ke<X;++Ke){let Ve=Ke-Ae,rt=Math.max(0,Math.ceil(Ve/de)),it=Math.min(Y,(B+Ve)/de);for(let je=0;je<ee;++je){let lt=je-ke,ut=Math.max(0,Math.ceil(lt/he)),Dn=Math.min(ue,(G+lt)/he);for(let Ye=0;Ye<J;++Ye){let wn=Ye-Ee,qt=Math.max(0,Math.ceil(wn/me)),_n=Math.min(ne,(V+wn)/me),jn=0;for(let hn=rt;hn<it;++hn){let nn=hn*de-Ve;for(let Gn=ut;Gn<Dn;++Gn){let vr=Gn*he-lt;for(let bn=qt;bn<_n;++bn){let Ni=bn*me-wn,Pl=b*Ce+x*hn+w*Gn+_*bn,ur=T*(B-1-nn)+E*(G-1-vr)+M*(V-1-Ni)+z*Oe;for(let qn=0;qn<ae;++qn){let cr=g[Pl+qn],Si=N[ur+qn];jn+=cr*Si}}}}p[f*Ce+m*Ke+A*je+y*Ye+Oe]=jn}}}return n.makeTensorInfo(d.shape,d.dtype,d.values)}var YF={kernelName:kh,backendName:"cpu",kernelFunc:JF},QF=st(rs,e=>Math.cos(e)),eM={kernelName:rs,backendName:"cpu",kernelFunc:QF},tM=st(Xi,e=>Math.cosh(e)),nM={kernelName:Xi,backendName:"cpu",kernelFunc:tM};function rM(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:c}=r,[u,h,d,p]=a.shape,f=s.shape[0],[m,A]=o,y=We([f,m,A,p],"float32"),g=n.data.get(s.dataId).values,b=n.data.get(i.dataId).values,x=n.data.get(a.dataId).values,w=k.computeStrides(a.shape),_=k.computeStrides(y.shape);for(let N=0;N<f;N++){let T=N*4,E=g[T],M=g[T+1],z=g[T+2],P=g[T+3],B=b[N];if(B>=u)continue;let G=m>1?(z-E)*(h-1)/(m-1):0,V=A>1?(P-M)*(d-1)/(A-1):0;for(let K=0;K<m;K++){let X=m>1?E*(h-1)+K*G:.5*(E+z)*(h-1);if(X<0||X>h-1){for(let ee=0;ee<A;ee++)for(let J=0;J<p;J++){let ae=J+ee*_[2]+K*_[1]+N*_[0];y.values[ae]=c}continue}if(l==="bilinear"){let ee=Math.floor(X),J=Math.ceil(X),ae=X-ee;for(let Y=0;Y<A;Y++){let ue=A>1?M*(d-1)+Y*V:.5*(M+P)*(d-1);if(ue<0||ue>d-1){for(let me=0;me<p;me++){let Ae=me+Y*_[2]+K*_[1]+N*_[0];y.values[Ae]=c}continue}let ne=Math.floor(ue),de=Math.ceil(ue),he=ue-ne;for(let me=0;me<p;me++){let Ae=me+ne*w[2]+ee*w[1]+B*w[0],ke=x[Ae];Ae=me+de*w[2]+ee*w[1]+B*w[0];let Ee=x[Ae];Ae=me+ne*w[2]+J*w[1]+B*w[0];let Ce=x[Ae];Ae=me+de*w[2]+J*w[1]+B*w[0];let Oe=x[Ae],Ke=ke+(Ee-ke)*he,Ve=Ce+(Oe-Ce)*he;Ae=me+Y*_[2]+K*_[1]+N*_[0],y.values[Ae]=Ke+(Ve-Ke)*ae}}}else for(let ee=0;ee<A;++ee){let J=A>1?M*(d-1)+ee*V:.5*(M+P)*(d-1);if(J<0||J>d-1){for(let ue=0;ue<p;ue++){let ne=ue+ee*_[2]+K*_[1]+N*_[0];y.values[ne]=c}continue}let ae=Math.round(J),Y=Math.round(X);for(let ue=0;ue<p;ue++){let ne=ue+ae*w[2]+Y*w[1]+B*w[0],de=ue+ee*_[2]+K*_[1]+N*_[0];y.values[de]=x[ne]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var aM={kernelName:Ki,backendName:"cpu",kernelFunc:rM};function sM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;ve(a,"cumsum");let l=C.getAxesPermutation([s],a.shape.length),c=a;l!=null&&(c=ar({inputs:{x:a},backend:n,attrs:{perm:l}}));let u=C.getInnerMostAxes(1,a.shape.length)[0];if(u!==c.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${c.shape.length-1} but got axis=${u}`);let h=Jn(c.dtype,"int32"),d=k.makeZerosTypedArray(k.sizeFromShape(c.shape),h),p=n.data.get(c.dataId).values,f=c.shape[c.shape.length-1],m=o?(y,g)=>y+f-g-1:(y,g)=>y+g;for(let y=0;y<p.length;y+=f)for(let g=0;g<f;g++){let b=m(y,g);if(g===0)d[b]=i?0:p[b];else{let x=m(y,g-1);d[b]=i?p[x]+d[x]:p[b]+d[x]}}let A=n.makeTensorInfo(c.shape,h,d);if(l!=null){let y=C.getUndoAxesPermutation(l),g=ar({inputs:{x:A},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(A),n.disposeIntermediateTensorInfo(c),g}return A}var iM={kernelName:as,backendName:"cpu",kernelFunc:sM};function oM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.data.get(a.dataId).values,c=n.data.get(s.dataId).values,u=sA(l,c,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}else if(a.shape.length===2){let l=n.bufferSync(a),c=n.bufferSync(s),u=dx(l,c,i,o);return n.makeTensorInfo(u.shape,s.dtype,u.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var lM={kernelName:Ih,backendName:"cpu",kernelFunc:oM};function uM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;k.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`),k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=a.shape[1],c=a.shape[2],u=a.shape[3],h=l*s,d=c*s,p=u/(s*s),f=n.data.get(a.dataId).values,m=new Float32Array(o*h*d*p),A=0;for(let y=0;y<o;++y)for(let g=0;g<h;++g){let b=Math.floor(g/s),x=g%s;for(let w=0;w<d;++w){let _=Math.floor(w/s),N=w%s,T=(x*s+N)*p;for(let E=0;E<p;++E){let M=E+T+u*(_+c*(b+l*y));m[A++]=f[M]}}}return n.makeTensorInfo([o,h,d,p],a.dtype,m)}var cM={kernelName:Zi,backendName:"cpu",kernelFunc:uM};function jx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:c}=r;ve([a,s],"depthwiseConv2DNative");let u=k.computeStrides(a.shape),h=k.computeStrides(s.shape),d=l;d==null&&(d=[1,1]),k.assert(C.eitherStridesOrDilationsAreOne(i,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`);let p=C.computeConv2DInfo(a.shape,s.shape,i,d,o,c,!0),{filterHeight:f,filterWidth:m,dilationHeight:A,dilationWidth:y,padInfo:g}=p,b=g.left,x=g.top,w=p.outChannels/p.inChannels,_=new Mt(p.outShape,a.dtype),N=n.data.get(a.dataId).values,T=n.data.get(s.dataId).values,E=_.values;for(let M=0;M<p.batchSize;++M){let z=M*u[0],P=M*_.strides[0];for(let B=0;B<p.outHeight;++B){let G=P+B*_.strides[1],V=B*p.strideHeight-b;for(let K=0;K<f;++K){let X=V+K*A;if(X<0||X>=p.inHeight)continue;let ee=K*h[0],J=z+X*u[1];for(let ae=0;ae<p.outWidth;++ae){let Y=G+ae*_.strides[2],ue=ae*p.strideWidth-x;for(let ne=0;ne<m;++ne){let de=ue+ne*y;if(de<0||de>=p.inWidth)continue;let he=ee+ne*h[1],me=J+de*p.inChannels,Ae=Y,ke=he;for(let Ee=0;Ee<p.inChannels;++Ee){let Ce=N[me+Ee];for(let Oe=0;Oe<w;++Oe)E[Ae+Oe]+=Ce*T[ke+Oe];Ae+=w,ke+=w}}}}}}return n.makeTensorInfo(_.shape,_.dtype,_.values)}var hM={kernelName:ss,backendName:"cpu",kernelFunc:jx};function dM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,filterShape:u}=r;ve([a,s],"depthwiseConv2dNativeBackpropFilter");let h=C.computeConv2DInfo(a.shape,u,i,o,l,c,!0),{strideHeight:d,strideWidth:p,filterHeight:f,filterWidth:m}=h,A=new Mt(h.filterShape,"float32"),y=h.padInfo.left,g=h.padInfo.top,b=h.outChannels/h.inChannels,x=n.data.get(a.dataId).values,w=new Mt(a.shape,a.dtype,x),_=n.data.get(s.dataId).values,N=new Mt(s.shape,s.dtype,_);for(let T=0;T<f;++T){let E=Math.max(0,Math.ceil((g-T)/d)),M=Math.min(h.outHeight,(h.inHeight+g-T)/d);for(let z=0;z<m;++z){let P=Math.max(0,Math.ceil((y-z)/p)),B=Math.min(h.outWidth,(h.inWidth+y-z)/p);for(let G=0;G<h.outChannels;++G){let V=Math.trunc(G/b),K=G%b,X=0;for(let ee=0;ee<h.batchSize;++ee)for(let J=E;J<M;++J){let ae=T+J*d-g;for(let Y=P;Y<B;++Y){let ue=z+Y*p-y;X+=w.get(ee,ae,ue,V)*N.get(ee,J,Y,G)}}A.set(X,T,z,V,K)}}}return n.makeTensorInfo(A.shape,A.dtype,A.values)}var pM={kernelName:Nh,backendName:"cpu",kernelFunc:dM};function fM(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,inputShape:u}=r;ve([a,s],"depthwiseConv2DNativeBackpropInput");let h=k.computeStrides(a.shape),d=k.computeStrides(s.shape),p=C.computeConv2DInfo(u,s.shape,i,o,l,c,!0),f=new Mt(p.inShape,"float32"),m=f.values,[A,y,g]=f.strides,b=n.data.get(a.dataId).values,[x,w,_]=h,N=n.data.get(s.dataId).values,[T,E,M]=d,{batchSize:z,filterHeight:P,filterWidth:B,inChannels:G,inHeight:V,inWidth:K,outChannels:X,outHeight:ee,outWidth:J,strideHeight:ae,strideWidth:Y}=p,ue=P-1-p.padInfo.top,ne=B-1-p.padInfo.left,de=X/G;for(let he=0;he<z;++he)for(let me=0;me<G;++me)for(let Ae=0;Ae<V;++Ae){let ke=Ae-ue,Ee=Math.max(0,Math.ceil(ke/ae)),Ce=Math.min(ee,(P+ke)/ae);for(let Oe=0;Oe<K;++Oe){let Ke=Oe-ne,Ve=Math.max(0,Math.ceil(Ke/Y)),rt=Math.min(J,(B+Ke)/Y),it=0;for(let je=Ee;je<Ce;++je){let lt=je*ae-ke;for(let ut=Ve;ut<rt;++ut){let Dn=ut*Y-Ke,Ye=x*he+w*je+_*ut,wn=T*(P-1-lt)+E*(B-1-Dn)+M*me;for(let qt=0;qt<de;++qt){let _n=me*de+qt,jn=b[Ye+_n],hn=N[wn+qt];it+=jn*hn}}}m[A*he+y*Ae+g*Oe+me]=it}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var mM={kernelName:Sh,backendName:"cpu",kernelFunc:fM};function AM(e){let{inputs:t,backend:n}=e,{x:r}=t,a=k.sizeFromShape(r.shape),s=n.data.get(r.dataId).values,i=We([a,a],r.dtype),o=i.values;for(let c=0;c<s.length;c++)o[c*a+c]=s[c];let l=[...r.shape,...r.shape];return n.makeTensorInfo(l,i.dtype,i.values)}var yM={kernelName:Th,backendName:"cpu",kernelFunc:AM},gM={kernelName:lu,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a}=e,{strides:s,pad:i,dilations:o}=n,l=t,c=l.data.get(r.dataId).values,u=r.shape.length,h=l.data.get(a.dataId).values,d=a.shape.length,{batchSize:p,inHeight:f,inWidth:m,inChannels:A,outHeight:y,outWidth:g,padInfo:b,strideHeight:x,strideWidth:w,filterHeight:_,filterWidth:N,dilationHeight:T,dilationWidth:E,outShape:M}=C.computeDilation2DInfo(r.shape,a.shape,s,i,"NHWC",o),z=k.sizeFromShape(M),P=M.length,B=k.getArrayFromDType(r.dtype,z);for(let G=0;G<p;++G)for(let V=0;V<y;++V){let K=V*x-b.top;for(let X=0;X<g;++X){let ee=X*w-b.left;for(let J=0;J<A;++J){let ae=Number.MIN_SAFE_INTEGER;for(let ue=0;ue<_;++ue){let ne=K+ue*T;if(ne>=0&&ne<f)for(let de=0;de<N;++de){let he=ee+de*E;if(he>=0&&he<m){let me=k.locToIndex([G,ne,he,J],u,k.computeStrides(r.shape)),Ae=k.locToIndex([ue,de,J],d,k.computeStrides(a.shape)),ke=c[me]+h[Ae];ke>ae&&(ae=ke)}}}let Y=k.locToIndex([G,V,X,J],P,k.computeStrides(M));B[Y]=ae}}}return{dataId:l.write(k.toTypedArray(B,r.dtype),M,r.dtype),shape:M,dtype:r.dtype}}},xM={kernelName:Ch,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,c=t,u=k.toNestedArray(r.shape,c.data.get(r.dataId).values),h=k.toNestedArray(a.shape,c.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:b,strideWidth:x,filterHeight:w,filterWidth:_,dilationHeight:N,dilationWidth:T,outShape:E}=C.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);k.assert(s.rank===E.length,()=>`Error in ${Ch}, dy must have the same rank as output ${E.length}, but got ${s.rank}`);let M=k.toNestedArray(E,c.data.get(s.dataId).values),z=k.makeZerosNestedTypedArray(a.shape,a.dtype);for(let P=0;P<d;++P)for(let B=0;B<A;++B){let G=B*b-g.top;for(let V=0;V<y;++V){let K=V*x-g.left;for(let X=0;X<m;++X){let ee=Number.MIN_SAFE_INTEGER,J=0,ae=0;for(let Y=0;Y<w;++Y){let ue=G+Y*N;if(ue>=0&&ue<p)for(let ne=0;ne<_;++ne){let de=K+ne*T;if(de>=0&&de<f){let he=u[P][ue][de][X]+h[Y][ne][X];he>ee&&(ee=he,J=Y,ae=ne)}}}z[J][ae][X]+=M[P][B][V][X]}}}return{dataId:c.write(k.toTypedArray(z,r.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},wM={kernelName:Eh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,c=t,u=k.toNestedArray(r.shape,c.data.get(r.dataId).values),h=k.toNestedArray(a.shape,c.data.get(a.dataId).values),{batchSize:d,inHeight:p,inWidth:f,inChannels:m,outHeight:A,outWidth:y,padInfo:g,strideHeight:b,strideWidth:x,filterHeight:w,filterWidth:_,dilationHeight:N,dilationWidth:T,outShape:E}=C.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);k.assert(s.rank===E.length,()=>`Error in ${Eh}, dy must have the same rank as output ${E.length}, but got ${s.rank}`);let M=k.toNestedArray(E,c.data.get(s.dataId).values),z=k.makeZerosNestedTypedArray(r.shape,r.dtype);for(let P=0;P<d;++P)for(let B=0;B<A;++B){let G=B*b-g.top;for(let V=0;V<y;++V){let K=V*x-g.left;for(let X=0;X<m;++X){let ee=Number.MIN_SAFE_INTEGER,J=G<0?0:G,ae=K<0?0:K;for(let Y=0;Y<w;++Y){let ue=G+Y*N;if(ue>=0&&ue<p)for(let ne=0;ne<_;++ne){let de=K+ne*T;if(de>=0&&de<f){let he=u[P][ue][de][X]+h[Y][ne][X];he>ee&&(ee=he,J=ue,ae=de)}}}z[P][J][ae][X]+=M[P][B][V][X]}}}return{dataId:c.write(k.toTypedArray(z,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function _M(e){let{inputs:t,backend:n}=e,{dy:r,y:a}=t;ve([r,a],"eluGrad");let s=new Float32Array(k.sizeFromShape(a.shape)),i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values;for(let l=0;l<i.length;++l){let c=i[l];c>=1?s[l]=o[l]:s[l]=o[l]*(c+1)}return n.makeTensorInfo(a.shape,"float32",s)}var bM={kernelName:Rh,backendName:"cpu",kernelFunc:_M},vM=Rt((e,t)=>e===t?1:0),Gx=Ht(Qi,vM,null,"bool"),kM={kernelName:Qi,backendName:"cpu",kernelFunc:Gx},IM=C.ERF_P,NM=C.ERF_A1,SM=C.ERF_A2,TM=C.ERF_A3,EM=C.ERF_A4,CM=C.ERF_A5,RM=st(Yi,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+IM*n);return t*(1-((((CM*r+EM)*r+TM)*r+SM)*r+NM)*r*Math.exp(-n*n))}),FM={kernelName:Yi,backendName:"cpu",kernelFunc:RM};function Jd(e){let{inputs:t,backend:n,attrs:r}=e,{input:a}=t,{dim:s}=r,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),yt({inputs:{x:a},backend:n,attrs:{shape:o}})}var MM={kernelName:eo,backendName:"cpu",kernelFunc:Jd},$M=Rt((e,t)=>e/t),mA=Ht(is,$M),AA={kernelName:is,backendName:"cpu",kernelFunc:mA};function qx(e,t,n){let r=e.shape,a=r[0],s=r[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,c=[a,s],u=k.sizeFromShape(c),h=k.getTypedArrayFromDType("float32",u),d=k.getTypedArrayFromDType("float32",u);for(let A=0;A<a;A++){let y=si({inputs:{x:o},backend:n,attrs:{begin:[A,0],size:[1,s]}}),g=si({inputs:{x:l},backend:n,attrs:{begin:[A,0],size:[1,s]}}),b=Tn({inputs:{real:y,imag:g},backend:n}),{real:x,imag:w}=DM(b,t,n),_=C.mergeRealAndImagArrays(x,w);for(let N=0;N<s;N++){let T=C.getComplexWithIndex(_,N);h[A*s+N]=T.real,d[A*s+N]=T.imag}n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(b)}let p=n.makeTensorInfo(c,"float32",h),f=n.makeTensorInfo(c,"float32",d),m=Tn({inputs:{real:p,imag:f},backend:n});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}function DM(e,t,n){let r=k.sizeFromShape(e.shape),a=n.data.get(e.dataId),s=n.data.get(a.complexTensorInfos.real.dataId).values,i=n.data.get(a.complexTensorInfos.imag.dataId).values;if(OM(r)){let o=yA(s,i,r,t,n),l=[e.shape[0],e.shape[1]];if(t){let c=n.makeTensorInfo(l,"float32",o.real),u=n.makeTensorInfo(l,"float32",o.imag),h=n.makeTensorInfo([],"float32",k.createScalarValue(r,"float32")),d=Pr({inputs:{x:h},backend:n}),p=AA.kernelFunc({inputs:{a:c,b:h},backend:n}),f=AA.kernelFunc({inputs:{a:u,b:d},backend:n}),m=n.data.get(p.dataId).values,A=n.data.get(f.dataId).values;return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),{real:m,imag:A}}return o}else{let o=C.mergeRealAndImagArrays(s,i),l=zM(o,r,t);return C.splitRealAndImagArrays(l)}}function OM(e){return(e&e-1)==0}function yA(e,t,n,r,a){if(n===1)return{real:e,imag:t};let s=C.mergeRealAndImagArrays(e,t),i=n/2,o=C.complexWithEvenIndex(s),l=o.real,c=o.imag,u=[l.length],h=a.makeTensorInfo(u,"float32",l),d=a.makeTensorInfo(u,"float32",c),p=Tn({inputs:{real:h,imag:d},backend:a}),f=C.complexWithOddIndex(s),m=f.real,A=f.imag,y=[m.length],g=a.makeTensorInfo(y,"float32",m),b=a.makeTensorInfo(y,"float32",A),x=Tn({inputs:{real:g,imag:b},backend:a}),w=yA(l,c,i,r,a),_=w.real,N=w.imag,T=[_.length],E=a.makeTensorInfo(T,"float32",_),M=a.makeTensorInfo(T,"float32",N),z=Tn({inputs:{real:E,imag:M},backend:a}),P=yA(m,A,i,r,a),B=P.real,G=P.imag,V=[B.length],K=a.makeTensorInfo(V,"float32",B),X=a.makeTensorInfo(V,"float32",G),ee=Tn({inputs:{real:K,imag:X},backend:a}),J=C.exponents(n,r),ae=[J.real.length],Y=a.makeTensorInfo(ae,"float32",J.real),ue=a.makeTensorInfo(ae,"float32",J.imag),ne=Tn({inputs:{real:Y,imag:ue},backend:a}),de=hA({inputs:{a:ne,b:ee},backend:a}),he=nc({inputs:{a:z,b:de},backend:a}),me=dA({inputs:{a:z,b:de},backend:a}),Ae=ai({inputs:{input:he},backend:a}),ke=ai({inputs:{input:me},backend:a}),Ee=dl({inputs:{input:he},backend:a}),Ce=dl({inputs:{input:me},backend:a}),Oe=pl({inputs:[Ae,ke],backend:a,attrs:{axis:0}}),Ke=pl({inputs:[Ee,Ce],backend:a,attrs:{axis:0}}),Ve=a.data.get(Oe.dataId).values,rt=a.data.get(Ke.dataId).values;return a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(d),a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(g),a.disposeIntermediateTensorInfo(b),a.disposeIntermediateTensorInfo(x),a.disposeIntermediateTensorInfo(E),a.disposeIntermediateTensorInfo(M),a.disposeIntermediateTensorInfo(z),a.disposeIntermediateTensorInfo(K),a.disposeIntermediateTensorInfo(X),a.disposeIntermediateTensorInfo(ee),a.disposeIntermediateTensorInfo(Y),a.disposeIntermediateTensorInfo(ue),a.disposeIntermediateTensorInfo(ne),a.disposeIntermediateTensorInfo(de),a.disposeIntermediateTensorInfo(he),a.disposeIntermediateTensorInfo(me),a.disposeIntermediateTensorInfo(Ae),a.disposeIntermediateTensorInfo(Ee),a.disposeIntermediateTensorInfo(ke),a.disposeIntermediateTensorInfo(Ce),a.disposeIntermediateTensorInfo(Oe),a.disposeIntermediateTensorInfo(Ke),{real:Ve,imag:rt}}function zM(e,t,n){let r=new Float32Array(t*2);for(let a=0;a<t;a++){let s=0,i=0;for(let o=0;o<t;o++){let l=C.exponent(a*o,t,n),c=C.getComplexWithIndex(e,o);s+=c.real*l.real-c.imag*l.imag,i+=c.real*l.imag+c.imag*l.real}n&&(s/=t,i/=t),C.assignToTypedArray(r,s,i,a)}return r}function PM(e){let{inputs:t,backend:n}=e,{input:r}=t,a=k.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=yt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=qx(o,!1,n),c=yt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),c}var LM={kernelName:Fh,backendName:"cpu",kernelFunc:PM};function gA(e){let{backend:t,attrs:n}=e,{shape:r,value:a,dtype:s}=n,i=s||k.inferDtype(a),o=k.getArrayFromDType(i,k.sizeFromShape(r));return WM(o,a,i),t.makeTensorInfo(r,i,o)}var BM={kernelName:uu,backendName:"cpu",kernelFunc:gA};function WM(e,t,n){e.fill(t)}var VM={kernelName:no,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,a=n,s=k.getTypedArrayFromDType(r.dtype,k.sizeFromShape(r.shape)),[i,o,l,c]=r.shape,u=a.data.get(r.dataId).values;for(let h=0;h<i;h++){let d=h*l*o*c;for(let p=0;p<o;p++){let f=p*(l*c);for(let m=0;m<l;m++){let A=m*c;for(let y=0;y<c;y++){let g=[i,p,m,y][2],b=Math.round(l-g),x=d+f+A+y,w=u[x];if(b>=0&&b<l){let _=b*c,N=d+f+_+y;w=u[N]}s[x]=w}}}}return{dataId:a.write(s,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},UM=Rt((e,t)=>Math.floor(e/t)),HM=Ht(us,UM,null,"int32"),jM={kernelName:us,backendName:"cpu",kernelFunc:HM};function GM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=Hx({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=nc({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=pA(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var qM={kernelName:Vs,backendName:"cpu",kernelFunc:GM};function XM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=jx({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d}});if(i){let A=m;m=nc({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(A)}if(p){let A=m;m=pA(n,m,p,o,f),n.disposeIntermediateTensorInfo(A)}return m}var KM={kernelName:Us,backendName:"cpu",kernelFunc:XM};function ZM(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=k.sizeFromShape(r.shape),i=a.shape,o=i[i.length-1],[l,c,u,h]=C.prepareAndValidate(r,a);if(c===0)return n.makeTensorInfo(l,r.dtype,[]);let d=We([c,u],r.dtype),p=n.data.get(a.dataId).values,f=n.data.get(r.dataId).values;for(let m=0;m<c;m++){let A=[],y=0;for(let g=0;g<o;g++){let b=p[m*o+g];y+=b*h[g],A.push(b)}if(y<0||y>=s/u)throw new Error(`Invalid indices: ${A} does not index into ${r.shape}`);for(let g=0;g<u;g++)d.values[m*u+g]=f[y*u+g]}return n.makeTensorInfo(l,d.dtype,d.values)}var JM={kernelName:ao,backendName:"cpu",kernelFunc:ZM};function YM(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r;ve([a,s],"gatherV2");let l=o;o==null&&(l=0);let c=k.sizeFromShape(s.shape),u=k.parseAxisParam(i,a.shape)[0],h=C.segment_util.collectGatherOpShapeInfo(a,s,u,l),d=yt({inputs:{x:a},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),p=yt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,c/h.batchSize]}}),f=[h.batchSize,h.outerSize,c/h.batchSize,h.sliceSize],m=n.bufferSync(p),A=n.bufferSync(d),y=yx(A,m,f);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.makeTensorInfo(h.outputShape,y.dtype,y.values)}var QM={kernelName:ro,backendName:"cpu",kernelFunc:YM},e$=Rt((e,t)=>e>=t?1:0),t$=Ht(hs,e$,null,"bool"),n$={kernelName:hs,backendName:"cpu",kernelFunc:t$};function r$(e){let{inputs:t,backend:n}=e,{input:r}=t,a=k.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=a/s,o=yt({inputs:{x:r},backend:n,attrs:{shape:[i,s]}}),l=qx(o,!0,n),c=yt({inputs:{x:l},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),c}var a$={kernelName:Mh,backendName:"cpu",kernelFunc:r$},s$=st(io,e=>Number.isFinite(e)?1:0,"bool"),i$={kernelName:io,backendName:"cpu",kernelFunc:s$},o$=st(oo,e=>Math.abs(e)===Infinity?1:0,"bool"),l$={kernelName:oo,backendName:"cpu",kernelFunc:o$},u$=st(lo,e=>Number.isNaN(e)?1:0,"bool"),c$={kernelName:lo,backendName:"cpu",kernelFunc:u$},h$=Rt((e,t)=>e<=t?1:0),d$=Ht(co,h$,null,"bool"),p$={kernelName:co,backendName:"cpu",kernelFunc:d$};function f$(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=wx(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var m$={kernelName:Dh,backendName:"cpu",kernelFunc:f$},A$=st(ho,e=>Math.log1p(e)),y$={kernelName:ho,backendName:"cpu",kernelFunc:A$},g$=Rt((e,t)=>e&&t),x$=Ht(po,g$,null,"bool"),w$={kernelName:po,backendName:"cpu",kernelFunc:x$},_$=st(cu,e=>e?0:1,"bool"),b$={kernelName:cu,backendName:"cpu",kernelFunc:_$},v$=Rt((e,t)=>e||t),k$=Ht(hu,v$,null,"bool"),I$={kernelName:hu,backendName:"cpu",kernelFunc:k$};function N$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;ve(a,"LRN");let c=a.shape[3],u=c-1,h=n.data.get(a.dataId).values,d=k.sizeFromShape(a.shape),p=new Float32Array(d);function f(m){let A=m%c,y=m-A+Math.max(0,A-s),g=m-A+Math.min(A+s,u),b=0;for(;y<=g;y++){let x=h[y];b+=x*x}return b}for(let m=0;m<d;m++){let A=f(m),y=h[m]*Math.pow(i+o*A,-l);p[m]=y}return n.makeTensorInfo(a.shape,a.dtype,p)}var S$={kernelName:du,backendName:"cpu",kernelFunc:N$};function T$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:c,beta:u}=r;ve(i,"LRNGrad");let h=k.sizeFromShape(i.shape),d=i.shape[3],p=n.data.get(i.dataId).values,f=n.data.get(a.dataId).values,m=n.data.get(s.dataId).values,A=new Float32Array(h),y=h;for(let g=0;g<y;g++){let b=g%d,x=g-b+Math.max(0,b-o),w=g-b+Math.min(d,b+o+1),_=0;for(let N=x;N<w;N++)_+=Math.pow(f[N],2);_=c*_+l;for(let N=x;N<w;N++){let T=-2*c*u*f[N]*m[g]/_;g===N&&(T+=Math.pow(_,-u)),T*=p[g],A[N]+=T}}return n.makeTensorInfo(i.shape,a.dtype,A)}var E$={kernelName:Oh,backendName:"cpu",kernelFunc:T$};function Xx(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=n,l=a.shape,c=l.length,u=k.parseAxisParam(s,l),h=u,d=C.getAxesPermutation(h,c),p=o.data.get(a.dataId).values;if(d!=null){let x=new Array(c);for(let w=0;w<x.length;w++)x[w]=l[d[w]];p=lA(p,l,a.dtype,d,x),h=C.getInnerMostAxes(h.length,c),l=x}ve(a,"max"),C.assertAxesAreInnerMostDims("max",h,c);let[f,m]=C.computeOutAndReduceShapes(l,h),A=k.sizeFromShape(m),y=bx(p,A,f,a.dtype),g=o.write(y,f,a.dtype),b=f;return i&&(b=C.expandShapeToKeepDim(f,u)),{dataId:g,shape:b,dtype:a.dtype}}var C$={kernelName:ms,backendName:"cpu",kernelFunc:Xx};function R$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;ve(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(C.eitherStridesOrDilationsAreOne(i,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=C.computePool2DInfo(a.shape,s,i,c,o,l),h;if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))h=Pr({inputs:{x:a},backend:n});else{let d=n.data.get(a.dataId).values,p=k.computeStrides(a.shape),f=fA(d,a.shape,a.dtype,p,u,"max");h=n.makeTensorInfo(u.outShape,a.dtype,f.values)}return h}var F$={kernelName:ys,backendName:"cpu",kernelFunc:R$};function M$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c}=r;ve(a,"maxPool3d");let u=C.computePool3DInfo(a.shape,s,i,1,o,l,c),h=n.data.get(a.dataId).values,d=Ux(h,a.shape,a.dtype,k.computeStrides(a.shape),u,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var $$={kernelName:pu,backendName:"cpu",kernelFunc:M$};function D$(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=r;ve([a,s],"maxPool3DGrad");let u=C.computePool3DInfo(s.shape,i,o,1,l,c),h=n.bufferSync(s),d=_F(h,u),p=u.strideDepth,f=u.strideHeight,m=u.strideWidth,A=u.dilationDepth,y=u.dilationHeight,g=u.dilationWidth,b=u.effectiveFilterDepth,x=u.effectiveFilterHeight,w=u.effectiveFilterWidth,_=b-1-u.padInfo.front,N=w-1-u.padInfo.left,T=x-1-u.padInfo.top,E=We(s.shape,"float32"),M=n.bufferSync(a);for(let z=0;z<u.batchSize;++z)for(let P=0;P<u.inChannels;++P)for(let B=0;B<u.inDepth;++B)for(let G=0;G<u.inHeight;++G)for(let V=0;V<u.inWidth;++V){let K=B-_,X=G-T,ee=V-N,J=0;for(let ae=0;ae<b;ae+=A){let Y=(K+ae)/p;if(!(Y<0||Y>=u.outDepth||Math.floor(Y)!==Y))for(let ue=0;ue<x;ue+=y){let ne=(X+ue)/f;if(!(ne<0||ne>=u.outHeight||Math.floor(ne)!==ne))for(let de=0;de<w;de+=g){let he=(ee+de)/m;if(he<0||he>=u.outWidth||Math.floor(he)!==he)continue;let me=b*x*w-1-d.get(z,Y,ne,he,P),Ae=ae*x*w+ue*w+de,ke=me===Ae?1:0;ke!==0&&(J+=M.get(z,Y,ne,he,P)*ke)}}}E.set(J,z,B,G,V,P)}return n.makeTensorInfo(E.shape,E.dtype,E.values)}var O$={kernelName:Ph,backendName:"cpu",kernelFunc:D$};function z$(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;ve([s,i],"maxPoolGrad");let{filterSize:l,strides:c,pad:u,dimRoundingMode:h}=r,d=C.computePool2DInfo(o.shape,l,c,1,u,h),p=n.data.get(o.dataId).values,f=We(d.outShape,o.dtype,Vx(p,o.shape,o.dtype,d).values),m=d.strideHeight,A=d.strideWidth,y=d.dilationHeight,g=d.dilationWidth,b=d.effectiveFilterHeight,x=d.effectiveFilterWidth,w=x-1-d.padInfo.left,_=b-1-d.padInfo.top,N=We(o.shape,"float32"),T=n.data.get(a.dataId).values,E=We(a.shape,"float32",T);for(let M=0;M<d.batchSize;++M)for(let z=0;z<d.inChannels;++z)for(let P=0;P<d.inHeight;++P)for(let B=0;B<d.inWidth;++B){let G=P-_,V=B-w,K=0;for(let X=0;X<b;X+=y){let ee=(G+X)/m;if(!(ee<0||ee>=d.outHeight||Math.floor(ee)!==ee))for(let J=0;J<x;J+=g){let ae=(V+J)/A;if(ae<0||ae>=d.outWidth||Math.floor(ae)!==ae)continue;let Y=b*x-1-f.get(M,ee,ae,z),ue=X*x+J,ne=Y===ue?1:0;ne!==0&&(K+=E.get(M,ee,ae,z)*ne)}}N.set(K,M,P,B,z)}return n.makeTensorInfo(N.shape,N.dtype,N.values)}var P$={kernelName:zh,backendName:"cpu",kernelFunc:z$};function L$(e,t,n,r,a){let s=k.computeStrides(t),i=fA(e,t,n,s,a,"max"),o=Vx(e,t,n,a,!0,r);return[i.values,o.values]}var W$={kernelName:Lh,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;ve(r,"MaxPoolWithArgmax");let c=l.data.get(r.dataId).values,u=C.computePool2DInfo(r.shape,a,s,[1,1],i),[h,d]=L$(c,r.shape,r.dtype,o,u),p=l.write(h,u.outShape,r.dtype),f=l.write(d,u.outShape,r.dtype);return[{dataId:p,shape:u.outShape,dtype:r.dtype},{dataId:f,shape:u.outShape,dtype:"int32"}]}};function Yd(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;ve(a,"sum");let o;a.dtype==="bool"?o=Ca({inputs:{x:a},backend:n,attrs:{dtype:"int32"}}):o=Pr({inputs:{x:a},backend:n});let l=o.shape.length,c=k.parseAxisParam(s,o.shape),u=C.getAxesPermutation(c,l),h=c,d=o;u!=null&&(d=ar({inputs:{x:o},backend:n,attrs:{perm:u}}),h=C.getInnerMostAxes(h.length,l)),C.assertAxesAreInnerMostDims("sum",h,d.shape.length);let[p,f]=C.computeOutAndReduceShapes(d.shape,h),m=C.upcastType(d.dtype,"int32"),A=Zd(n,p,m),y=k.sizeFromShape(f),g=n.data.get(A.dataId).values,b=n.data.get(d.dataId).values;for(let x=0;x<g.length;++x){let w=x*y,_=0;for(let N=0;N<y;++N)_+=b[w+N];g[x]=_}if(i){let x=C.expandShapeToKeepDim(A.shape,c),w=A;A=yt({inputs:{x:A},backend:n,attrs:{shape:x}}),n.disposeIntermediateTensorInfo(w)}return n.disposeIntermediateTensorInfo(o),u!=null&&n.disposeIntermediateTensorInfo(d),A}var B$={kernelName:Ds,backendName:"cpu",kernelFunc:Yd};function V$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=k.parseAxisParam(s,a.shape),l=C.computeOutAndReduceShapes(a.shape,o)[1],c=k.sizeFromShape(l),u=[],h=n.makeTensorInfo([],"float32",new Float32Array([c]));u.push(h);let d=Ca({inputs:{x:a},backend:n,attrs:{dtype:"float32"}});u.push(d);let p=mA({inputs:{a:d,b:h},backend:n});u.push(p);let f=Yd({inputs:{x:p},backend:n,attrs:{axis:s,keepDims:i}});return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var U$={kernelName:gs,backendName:"cpu",kernelFunc:V$};function H$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;ve(a,"min");let o=k.parseAxisParam(s,a.shape),l=o,c=C.getAxesPermutation(l,a.shape.length),u=a;c!=null&&(u=ar({inputs:{x:a},backend:n,attrs:{perm:c}}),l=C.getInnerMostAxes(l.length,a.shape.length)),C.assertAxesAreInnerMostDims("min",l,u.shape.length);let[h,d]=C.computeOutAndReduceShapes(u.shape,l),p=k.sizeFromShape(d),f=k.makeZerosTypedArray(k.sizeFromShape(h),u.dtype),m=n.data.get(u.dataId).values;for(let y=0;y<f.length;++y){let g=y*p,b=m[g];for(let x=0;x<p;++x){let w=m[g+x];w<b&&(b=w)}f[y]=b}c!=null&&n.disposeIntermediateTensorInfo(u);let A=n.makeTensorInfo(h,u.dtype,f);if(i){let y=C.expandShapeToKeepDim(h,o),g=yt({inputs:{x:A},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(A),g}return A}var j$={kernelName:xs,backendName:"cpu",kernelFunc:H$};function G$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,mode:i}=r;ve(a,"mirrorPad");let o=s.map((g,b)=>g[0]+a.shape[b]+g[1]),l=s.map(g=>g[0]),c=s.map((g,b)=>g[0]+a.shape[b]),u=i==="reflect"?0:1,h=n.data.get(a.dataId).values,d=a.shape.length,p=k.computeStrides(a.shape),f=k.sizeFromShape(o),m=o.length,A=k.computeStrides(o),y=k.getTypedArrayFromDType(a.dtype,f);for(let g=0;g<f;g++){let b=k.indexToLoc(g,m,A);for(let w=0;w<m;w++)b[w]<l[w]?b[w]=l[w]*2-b[w]-u:b[w]>=c[w]&&(b[w]=(c[w]-1)*2-b[w]+u);b=b.map((w,_)=>w-l[_]);let x=k.locToIndex(b,d,p);y[g]=h[x]}return{dataId:n.write(y,o,a.dtype),shape:o,dtype:a.dtype}}var q$={kernelName:fu,backendName:"cpu",kernelFunc:G$},X$=Rt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),K$=Ht(fo,X$),Z$={kernelName:fo,backendName:"cpu",kernelFunc:K$},J$=Qo(gk());function Kx(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=a.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=k.parseAxisParam([o],a.shape),c=Xx({inputs:{x:a},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),u=C.expandShapeToKeepDim(c.shape,l),h=yt({inputs:{x:c},backend:n,attrs:{shape:u}}),d=dA({inputs:{a,b:h},backend:n}),p=Dx({inputs:{x:d},backend:n}),f=Yd({inputs:{x:p},backend:n,attrs:{axis:l,keepDims:!1}}),m=yt({inputs:{x:f},backend:n,attrs:{shape:u}}),A=mA({inputs:{a:p,b:m},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),A}var Y$={kernelName:Os,backendName:"cpu",kernelFunc:Kx};function Q$(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;ve(a,"multinomial");let l=o?a:Kx({inputs:{logits:a},backend:n,attrs:{dim:-1}}),c=l.shape[0],u=l.shape[1],h=n.data.get(l.dataId).values,d=[c,s],p=k.makeZerosTypedArray(k.sizeFromShape(d),"int32");for(let f=0;f<c;++f){let m=f*u,A=new Float32Array(u-1);A[0]=h[m];for(let b=1;b<A.length;++b)A[b]=A[b-1]+h[m+b];let y=J$.alea(i.toString()),g=f*s;for(let b=0;b<s;++b){let x=y();p[g+b]=A.length;for(let w=0;w<A.length;w++)if(x<A[w]){p[g+b]=w;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(d,"int32",p)}var eD={kernelName:Wh,backendName:"cpu",kernelFunc:Q$},tD=Fr.nonMaxSuppressionV3Impl;function nD(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r;ve(a,"NonMaxSuppression");let c=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,{selectedIndices:h}=tD(c,u,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var rD={kernelName:yo,backendName:"cpu",kernelFunc:nD},aD=Fr.nonMaxSuppressionV4Impl;function sD(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:c}=r;ve(a,"NonMaxSuppressionPadded");let u=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,{selectedIndices:d,validOutputs:p}=aD(u,h,i,o,l,c);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var iD={kernelName:go,backendName:"cpu",kernelFunc:sD},oD=Fr.nonMaxSuppressionV5Impl;function lD(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:c}=r;ve(a,"NonMaxSuppressionWithScore");let u=n.data.get(a.dataId).values,h=n.data.get(s.dataId).values,d=i,p=o,f=l,m=c,{selectedIndices:A,selectedScores:y}=oD(u,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var uD={kernelName:xo,backendName:"cpu",kernelFunc:lD};function cD(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r;ve(a,"oneHot");let l=k.sizeFromShape(a.shape),c=new Float32Array(l*s);c.fill(o);let u=n.data.get(a.dataId).values;for(let h=0;h<l;++h)u[h]>=0&&u[h]<s&&(c[h*s+u[h]]=i);return n.makeTensorInfo([...a.shape,s],"int32",c)}var hD={kernelName:bs,backendName:"cpu",kernelFunc:cD};function Qd(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(r.dtype==="complex64"){let a=ai({inputs:{input:r},backend:n}),s=Qd({inputs:{x:a},backend:n}),i=dl({inputs:{input:r},backend:n}),o=Qd({inputs:{x:i},backend:n}),l=Tn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return gA({backend:n,attrs:{shape:r.shape,value:0,dtype:r.dtype}})}var dD={kernelName:zo,backendName:"cpu",kernelFunc:Qd};function Zx(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(r.dtype==="complex64"){let a=ai({inputs:{input:r},backend:n}),s=Zx({inputs:{x:a},backend:n}),i=dl({inputs:{input:r},backend:n}),o=Qd({inputs:{x:i},backend:n}),l=Tn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return gA({backend:n,attrs:{shape:r.shape,value:1,dtype:r.dtype}})}var pD={kernelName:wo,backendName:"cpu",kernelFunc:Zx};function Jx(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return Jd({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(u=>{k.assertShapesMatch(s,u.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===u.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(u=>{let h=Jd({inputs:{input:u},backend:n,attrs:{dim:a}});return o.push(h),h}),c=pl({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(u=>n.disposeIntermediateTensorInfo(u)),c}var fD={kernelName:_o,backendName:"cpu",kernelFunc:Jx};function mD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;ve(a,"pad");let o=s.map((y,g)=>y[0]+a.shape[g]+y[1]),l=s.map(y=>y[0]),c=n.data.get(a.dataId).values,u=k.sizeFromShape(a.shape),h=a.shape.length,d=k.computeStrides(a.shape),p=k.sizeFromShape(o),f=o.length,m=k.computeStrides(o),A=k.getTypedArrayFromDType(a.dtype,p);i!==0&&A.fill(i);for(let y=0;y<u;y++){let g=k.indexToLoc(y,h,d).map((x,w)=>x+l[w]),b=k.locToIndex(g,f,m);A[b]=c[y]}return{dataId:n.write(A,o,a.dtype),shape:o,dtype:a.dtype}}var Yx={kernelName:vs,backendName:"cpu",kernelFunc:mD},AD=Rt((e,t)=>Math.pow(e,t)),yD=Ht(ks,AD),gD={kernelName:ks,backendName:"cpu",kernelFunc:yD};function xD(e){let{backend:t,attrs:n}=e,{start:r,stop:a,dtype:s,step:i}=n,o=uA(r,a,i,s);return t.makeTensorInfo([o.length],s,o)}var wD={kernelName:mu,backendName:"cpu",kernelFunc:xD},_D=st(vo,e=>1/e),bD={kernelName:vo,backendName:"cpu",kernelFunc:_D};function vD(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;ve(a,"resizeBilinear");let l=k.computeStrides(a.shape),[c,u]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(k.sizeFromShape([h,c,u,f])),y=[s&&c>1?d-1:d,s&&u>1?p-1:p],g=[s&&c>1?c-1:c,s&&u>1?u-1:u],b=0,x=y[0]/g[0],w=y[1]/g[1];for(let _=0;_<h;_++)for(let N=0;N<c;N++){let T;i?T=x*(N+.5)-.5:T=x*N;let E=Math.max(0,Math.floor(T)),M=T-E,z=Math.min(d-1,Math.ceil(T)),P=_*l[0]+E*l[1],B=_*l[0]+z*l[1];for(let G=0;G<u;G++){let V;i?V=w*(G+.5)-.5:V=w*G;let K=Math.max(0,Math.floor(V)),X=V-K,ee=Math.min(p-1,Math.ceil(V)),J=P+K*l[2],ae=B+K*l[2],Y=P+ee*l[2],ue=B+ee*l[2];for(let ne=0;ne<f;ne++){let de=m[J+ne],he=m[ae+ne],me=m[Y+ne],Ae=m[ue+ne],ke=de+(me-de)*X,Ee=he+(Ae-he)*X,Ce=ke+(Ee-ke)*M;A[b++]=Ce}}}return n.makeTensorInfo([h,c,u,f],"float32",A)}var kD={kernelName:Ss,backendName:"cpu",kernelFunc:vD};function ID(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;ve([s,a],"resizeBilinearGrad");let o=k.computeStrides(a.shape),[l,c,u,h]=a.shape,[,d,p]=s.shape,f=new Float32Array(l*c*u*h),m=[i&&d>1?c-1:c,i&&p>1?u-1:u],A=[i&&d>1?d-1:d,i&&p>1?p-1:p],y=m[0]/A[0],g=m[1]/A[1],b=n.data.get(s.dataId).values,x=0;for(let w=0;w<l;w++){let _=w*o[0];for(let N=0;N<d;N++){let T=N*y,E=Math.floor(T),M=Math.min(Math.ceil(T),c-1),z=_+E*o[1],P=_+M*o[1],B=T-E,G=1-B;for(let V=0;V<p;V++){let K=V*g,X=Math.floor(K),ee=Math.min(Math.ceil(K),u-1),J=K-X,ae=1-J,Y=z+X*o[2],ue=z+ee*o[2],ne=P+X*o[2],de=P+ee*o[2],he=G*ae,me=G*J,Ae=B*ae,ke=B*J;for(let Ee=0;Ee<h;Ee++){let Ce=b[x++];f[Y+Ee]+=Ce*he,f[ue+Ee]+=Ce*me,f[ne+Ee]+=Ce*Ae,f[de+Ee]+=Ce*ke}}}}return n.makeTensorInfo([l,u,c,h],"float32",f)}var ND={kernelName:Uh,backendName:"cpu",kernelFunc:ID};function SD(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;ve(a,"resizeNearestNeighbor");let l=k.computeStrides(a.shape),[c,u]=o,[h,d,p,f]=a.shape,m=n.data.get(a.dataId).values,A=new Float32Array(h*c*u*f),y=[s&&c>1?d-1:d,s&&u>1?p-1:p],g=[s&&c>1?c-1:c,s&&u>1?u-1:u],b=y[0]/g[0],x=y[1]/g[1],w=0;for(let _=0;_<h;_++){let N=_*l[0];for(let T=0;T<c;T++){let E=i?b*(T+.5):b*T,M=Math.min(d-1,s?Math.round(E):Math.floor(E));i&&(M=Math.max(0,M));let z=N+M*l[1];for(let P=0;P<u;P++){let B=i?x*(P+.5):x*P,G=Math.min(p-1,s?Math.round(B):Math.floor(B));i&&(G=Math.max(0,G));let V=z+G*l[2];for(let K=0;K<f;K++){let X=m[V+K];A[w++]=X}}}}return n.makeTensorInfo([h,c,u,f],a.dtype,A)}var TD={kernelName:Au,backendName:"cpu",kernelFunc:SD};function ED(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;ve([s,a],"resizeNearestNeighborGrad");let o=k.computeStrides(a.shape),l=k.computeStrides(s.shape),[c,u,h,d]=a.shape,[,p,f]=s.shape,m=new Float32Array(c*u*h*d),A=n.data.get(s.dataId).values,y=[i&&p>1?u-1:u,i&&f>1?h-1:h],g=[i&&p>1?p-1:p,i&&f>1?f-1:f],b=y[0]/g[0],x=y[1]/g[1],w=1/b,_=1/x,N=Math.ceil(w)*2+2,T=Math.ceil(_)*2+2;for(let E=0;E<c;E++){let M=E*o[0];for(let z=0;z<u;z++){let P=M+z*o[1],B=Math.floor(z*w),G=Math.floor(B-N/2);for(let V=0;V<h;V++){let K=P+V*o[2],X=Math.floor(V*_),ee=Math.floor(X-T/2);for(let J=0;J<d;J++){let ae=0;for(let Y=0;Y<N;Y++){let ue=Y+G;if(ue<0||ue>=p)continue;let ne=M+ue*l[1],de=ue*b,he=Math.min(u-1,i?Math.round(de):Math.floor(de));if(z===he)for(let me=0;me<T;me++){let Ae=me+ee;if(Ae<0||Ae>=f)continue;let ke=ne+Ae*l[2],Ee=Ae*x,Ce=Math.min(h-1,i?Math.round(Ee):Math.floor(Ee));V===Ce&&(ae+=A[ke+J])}}m[K+J]=ae}}}}return n.makeTensorInfo(a.shape,a.dtype,m)}var CD={kernelName:Vh,backendName:"cpu",kernelFunc:ED};function RD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r;ve(a,"reverse");let i=a.shape.length,o=k.parseAxisParam(s,a.shape);if(i===0)return Pr({inputs:{x:a},backend:n});let l=new Mt(a.shape,a.dtype),c=n.bufferSync(a);for(let u=0;u<l.size;u++){let h=l.indexToLoc(u),d=h.slice();o.forEach(p=>d[p]=a.shape[p]-1-d[p]),l.set(c.get(...d),...h)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var FD={kernelName:Es,backendName:"cpu",kernelFunc:RD},MD={kernelName:Po,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=k.getTypedArrayFromDType(r.dtype,k.sizeFromShape(r.shape)),[c,u,h,d]=r.shape,[p,f]=C.getImageCenter(i,u,h),m=255,A=Math.sin(a),y=Math.cos(a),g=o.data.get(r.dataId).values;for(let b=0;b<c;b++){let x=b*h*u*d;for(let w=0;w<u;w++){let _=w*(h*d);for(let N=0;N<h;N++){let T=N*d;for(let E=0;E<d;E++){let M=[c,w,N,E],z=M[2],P=M[1],B=(z-p)*y-(P-f)*A,G=(z-p)*A+(P-f)*y;B=Math.round(B+p),G=Math.round(G+f);let V=s;if(typeof s!="number"&&(E===3?V=m:V=s[E]),B>=0&&B<h&&G>=0&&G<u){let X=G*(h*d),ee=B*d,J=x+X+ee+E;V=g[J]}let K=x+_+T+E;l[K]=V}}}}return{dataId:o.write(l,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},$D=st(Cs,e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1}),DD={kernelName:Cs,backendName:"cpu",kernelFunc:$D};function Qx(e,t,n,r,a,s,i,o,l,c){let u=[r/a,a],h=e.values,d=t.values;if(r===0)return We(n,t.dtype);let p=We(u,t.dtype);p.values.fill(l);for(let f=0;f<s;f++){let m=[],A=0;for(let y=0;y<i;y++){let g=h[f*i+y];m.push(g),A+=g*o[y]}if(A<0||A>=r/a)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let y=0;y<a;y++)c?p.values[A*a+y]+=d[f*a+y]:p.values[A*a+y]=t.rank===0?d[0]:d[f*a+y]}return p}function OD(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:c,strides:u,outputSize:h}=C.calculateShapes(s,a,i),d=!0,p=n.bufferSync(a),f=n.bufferSync(s),m=Qx(p,f,i,h,c,l,o,u,0,d);return n.makeTensorInfo(i,m.dtype,m.values)}var zD={kernelName:Io,backendName:"cpu",kernelFunc:OD};function PD(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t;ve([r,a,s],"select");let i=r.shape.length,o=n.data.get(r.dataId).values,l=n.data.get(a.dataId).values,c=n.data.get(s.dataId).values,u=Jn(a.dtype,s.dtype),h=k.makeZerosTypedArray(k.sizeFromShape(a.shape),u),d=0,p=i===0||i>1||a.shape.length===1?1:k.sizeFromShape(a.shape.slice(1));for(let f=0;f<o.length;f++)for(let m=0;m<p;m++)o[f]===1?h[d++]=l[f]:h[d++]=c[f];return n.makeTensorInfo(a.shape,u,h)}var LD={kernelName:No,backendName:"cpu",kernelFunc:PD},WD=C.SELU_SCALEALPHA,BD=C.SELU_SCALE,VD=st(So,e=>e>=0?BD*e:WD*(Math.exp(e)-1)),UD={kernelName:So,backendName:"cpu",kernelFunc:VD},HD=st(Ms,e=>1/(1+Math.exp(-e))),jD={kernelName:Ms,backendName:"cpu",kernelFunc:HD},GD=st(Co,e=>e<0?-1:e>0?1:0),qD={kernelName:Co,backendName:"cpu",kernelFunc:GD},XD=st(Fs,e=>Math.sin(e)),KD={kernelName:Fs,backendName:"cpu",kernelFunc:XD},ZD=st(Eo,e=>Math.sinh(e)),JD={kernelName:Eo,backendName:"cpu",kernelFunc:ZD},YD=11920928955078125e-23,ew=Math.log(YD)+2,QD=st(Ro,e=>{let t=e>-ew,n=e<ew,r=Math.exp(e),a;return n?a=r:t?a=e:a=Math.log(1+r),a}),eO={kernelName:Ro,backendName:"cpu",kernelFunc:QD};function tO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;ve([a],"spaceToBatchND");let o=k.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let A=1+s.length;A<a.shape.length;++A)l.push([0,0]);let c=Yx.kernelFunc({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),u=C.getReshaped(c.shape,s,o,!1),h=C.getPermuted(u.length,s.length,!1),d=C.getReshapedPermuted(c.shape,s,o,!1),p=yt({inputs:{x:c},backend:n,attrs:{shape:u}}),f=ar({inputs:{x:p},backend:n,attrs:{perm:h}}),m=yt({inputs:{x:f},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),m}var nO={kernelName:yu,backendName:"cpu",kernelFunc:tO};function rO(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:c,sliceSize:u,strides:h,outputSize:d}=C.calculateShapes(s,a,o),p=!1,f=n.bufferSync(a),m=n.bufferSync(s),A=n.data.get(i.dataId).values[0],y=Qx(f,m,o,d,u,c,l,h,A,p);return n.makeTensorInfo(o,y.dtype,y.values)}var aO={kernelName:Hh,backendName:"cpu",kernelFunc:rO};function sO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=k.parseAxisParam(i,a.shape)[0],l=C.prepareSplitSize(a,s,o),c=new Array(a.shape.length).fill(0),u=a.shape.slice();return l.map(h=>{let d=[...u];d[o]=h;let p=si({inputs:{x:a},backend:n,attrs:{begin:c,size:d}});return c[o]+=h,p})}var iO={kernelName:Fo,backendName:"cpu",kernelFunc:sO},oO=st($s,e=>Math.sqrt(e)),lO={kernelName:$s,backendName:"cpu",kernelFunc:oO},uO={kernelName:gu,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;ve(n,"square");let a=r.data.get(n.dataId).values,s=new Float32Array(a.length);for(let i=0;i<a.length;++i){let o=a[i];s[i]=o*o}return{dataId:r.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},cO=st(ya,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),hO={kernelName:ya,backendName:"cpu",kernelFunc:cO};function dO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r;ve(a,"stridedSlice");let{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=rn.sliceInfo(a.shape,s,i,o,l,c,u,h,d),b=yt({inputs:{x:a},backend:n,attrs:{shape:y}}),x;if(p){let _=si({inputs:{x:b},backend:n,attrs:{begin:f,size:A}});x=yt({inputs:{x:_},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(_)}else if(g.some(_=>_===0))x=n.makeTensorInfo(g,a.dtype,[]);else{let _=n.bufferSync(b),N=Cx(g,_,m,f);x=n.makeTensorInfo(N.shape,N.dtype,N.values)}let w=yt({inputs:{x},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(x),w}var pO={kernelName:Mo,backendName:"cpu",kernelFunc:dO},fO=st($o,e=>Math.tan(e)),mO={kernelName:$o,backendName:"cpu",kernelFunc:fO},AO=st(Ls,e=>Math.tanh(e)),yO={kernelName:Ls,backendName:"cpu",kernelFunc:AO};function gO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;ve(a,"tile");let i=Fx(n.bufferSync(a),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var xO={kernelName:Aa,backendName:"cpu",kernelFunc:gO};function wO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r;ve(a,"topk");let o=n.data.get(a.dataId).values,[l,c]=Mx(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(c.shape,c.dtype,c.values)]}var _O={kernelName:Do,backendName:"cpu",kernelFunc:wO};function bO(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;ve(s,"unique");let i=r.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:c}=$x(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([c.length],"int32",c)]}var vO={kernelName:jh,backendName:"cpu",kernelFunc:bO};function kO(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape.length,o=a.shape[s],l=new Array(i-1),c=0;for(let p=0;p<i;p++)p!==s&&(l[c++]=a.shape[p]);let u=new Array(i).fill(0),h=a.shape.slice();h[s]=1;let d=new Array(o);for(let p=0;p<d.length;p++){u[s]=p;let f=si({inputs:{x:a},backend:n,attrs:{begin:u,size:h}});d[p]=yt({inputs:{x:f},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(f)}return d}var IO={kernelName:Oo,backendName:"cpu",kernelFunc:kO};function NO(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r;ve(a,"unsortedSegmentSum");let o=a.shape.length,l=s.shape.length,c=[],u=[],h=o-l,d=s;for(let f=0;f<h;++f){let m=Jd({inputs:{input:d},backend:n,attrs:{dim:f+1}});d=m,u.push(m)}for(let f=0;f<i;++f){let m=k.createScalarValue(f,"int32"),A=n.makeTensorInfo([],"int32",m),y=Gx({inputs:{a:A,b:d},backend:n}),g=Ca({inputs:{x:y},backend:n,attrs:{dtype:"float32"}}),b=hA({inputs:{a:g,b:a},backend:n}),x=Yd({inputs:{x:b},backend:n,attrs:{axis:0,keepDims:!1}});c.push(x),u.push(A),u.push(y),u.push(g),u.push(b),u.push(x)}let p=Jx({inputs:c,backend:n,attrs:{axis:0}});return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var SO={kernelName:xu,backendName:"cpu",kernelFunc:NO},TO=[KR,eR,JR,QR,iR,tF,rF,sF,oF,uF,hF,pF,mF,gF,wF,vF,IF,SF,EF,qR,RF,MF,DF,aR,lR,zF,tR,LF,BF,HF,GF,VF,ZF,YF,XF,eM,nM,aM,iM,lM,cM,hM,pM,mM,yM,gM,wM,xM,AA,WR,bM,kM,FM,uR,MM,hR,LM,BM,VM,pR,jM,qM,KM,JM,QM,mR,n$,nR,a$,WF,i$,l$,c$,BR,yR,p$,m$,xR,y$,w$,b$,I$,S$,E$,_R,F$,$$,O$,P$,W$,C$,U$,j$,vR,q$,Z$,eD,IR,SR,rD,iD,uD,ER,hD,pD,fD,Yx,gD,UR,FR,wD,rR,bD,HR,jR,GR,kD,ND,TD,CD,FD,MD,DD,$R,zD,LD,UD,jD,qD,KD,JD,DR,Y$,eO,nO,aO,iO,lO,uO,zR,hO,pO,LR,B$,mO,yO,xO,_O,CR,vO,IO,SO,dD];for(let e of TO)Lo(e);var b0={};ze(b0,{assertNotComplex:()=>fl,bindCanvasToFramebuffer:()=>RO,bindColorTextureToFramebuffer:()=>tp,bindTextureToProgramUniformSampler:()=>mw,bindTextureUnit:()=>dw,bindVertexBufferToProgramAttribute:()=>xA,callAndCheck:()=>_e,canBeRepresented:()=>tw,createFragmentShader:()=>aw,createFramebuffer:()=>hw,createProgram:()=>sw,createStaticIndexBuffer:()=>lw,createStaticVertexBuffer:()=>ow,createTexture:()=>uw,createVertexShader:()=>rw,getBatchDim:()=>ii,getExtensionOrThrow:()=>rc,getFramebufferErrorMessage:()=>Aw,getMaxTexturesInShader:()=>xw,getNumChannels:()=>EO,getProgramUniformLocation:()=>fw,getProgramUniformLocationOrThrow:()=>pw,getRowsCols:()=>oi,getShapeAs3D:()=>np,getTextureShapeFromLogicalShape:()=>yw,getWebGLDisjointQueryTimerVersion:()=>ww,getWebGLErrorMessage:()=>nw,getWebGLMaxTextureSize:()=>gw,hasExtension:()=>Bn,isCapableOfRenderingToFloatTexture:()=>_w,isDownloadFloatTextureEnabled:()=>bw,isReshapeFree:()=>sc,isWebGLFenceEnabled:()=>vw,isWebGLVersionEnabled:()=>_A,linkProgram:()=>iw,resetMaxTextureSize:()=>FO,resetMaxTexturesInShader:()=>MO,unbindColorTextureFromFramebuffer:()=>wA,unbindTextureUnit:()=>CO,validateFramebuffer:()=>ac,validateProgram:()=>ep,validateTextureSize:()=>cw});var li={},bA={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function mm(e,t){li[e]=t}function Lr(e){if(!(e in li)){let n=$O(e);if(n!==null)li[e]=n;else return console.log("Could not get context for WebGL version",e),null}let t=li[e];return t.isContextLost()?(delete li[e],Lr(e)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),li[e])}function DO(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function $O(e){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let t=DO(e);return t.addEventListener("webglcontextlost",n=>{n.preventDefault(),delete li[e]},!1),e===1?t.getContext("webgl",bA)||t.getContext("experimental-webgl",bA):t.getContext("webgl2",bA)}var ic;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(ic||(ic={}));var Vn;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(Vn||(Vn={}));var Kt;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(Kt||(Kt={}));function oc(e,t){return[t,e]}function OO(e,t){return e*t}function lc(e){let t=k.sizeFromShape(e),n=Math.ceil(t/4);return k.sizeToSquarishShape(n)}function ml(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function zO(e,t){let[n,r]=ml(e,t);return n*r*4}function vA(e,t){let n=e,r,a,s,i,o,l,c,u,h,d;return Q().getNumber("WEBGL_VERSION")===2?(r=n.R32F,a=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,c=4,u=1,h=n.HALF_FLOAT,d=n.FLOAT):(r=e.RGBA,a=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,c=4,u=4,h=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:a,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:c,defaultNumChannels:u,textureTypeHalfFloat:h,textureTypeFloat:d}}function _e(e,t){let n=t();return Q().getBool("DEBUG")&&PO(e),n}function PO(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+nw(e,t))}var LO=596e-10,WO=65504;function tw(e){return!!(Q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||LO<Math.abs(e)&&Math.abs(e)<WO)}function nw(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function rc(e,t){return ra(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function rw(e,t){let n=ra(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(_e(e,()=>e.shaderSource(n,t)),_e(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function aw(e,t){let n=ra(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(_e(e,()=>e.shaderSource(n,t)),_e(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw BO(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var VO=/ERROR: [0-9]+:([0-9]+):/g;function BO(e,t){let n=VO.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],a=e.split(`
|
|
`),s=a.length.toString().length+2,i=a.map((h,d)=>k.rightPad((d+1).toString(),s)+h),o=0;for(let h=0;h<i.length;h++)o=Math.max(i[h].length,o);let l=i.slice(0,r-1),c=i.slice(r-1,r),u=i.slice(r);console.log(l.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${k.rightPad(c[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(u.join(`
|
|
`))}function sw(e){return ra(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function iw(e,t){if(_e(e,()=>e.linkProgram(t)),e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function ep(e,t){if(_e(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function ow(e,t){let n=ra(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return _e(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),_e(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function lw(e,t){let n=ra(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return _e(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),_e(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function EO(){return Q().getNumber("WEBGL_VERSION")===2?1:4}function uw(e){return ra(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function cw(e,t){let n=Q().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let r=`[${e}x${t}]`;throw new Error("Requested texture size "+r+" is invalid.")}if(e>n||t>n){let r=`[${e}x${t}]`,a=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+a+".")}}function hw(e){return ra(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function xA(e,t,n,r,a,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(_e(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),_e(e,()=>e.vertexAttribPointer(o,a,e.FLOAT,!1,s,i)),_e(e,()=>e.enableVertexAttribArray(o)),!0)}function dw(e,t,n){kw(e,n),_e(e,()=>e.activeTexture(e.TEXTURE0+n)),_e(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function CO(e,t){kw(e,t),_e(e,()=>e.activeTexture(e.TEXTURE0+t)),_e(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function pw(e,t,n){return ra(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function fw(e,t,n){return e.getUniformLocation(t,n)}function mw(e,t,n,r){_e(e,()=>dw(e,t,r)),_e(e,()=>e.uniform1i(n,r))}function RO(e){_e(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),_e(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),_e(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function tp(e,t,n){_e(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),_e(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function wA(e,t){_e(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),_e(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function ac(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Aw(e,t))}function Aw(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function ra(e,t,n){let r=_e(e,()=>t());if(r==null)throw new Error(n);return r}function kw(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(r<e.TEXTURE0||r>n){let a=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${a}.`)}}function ii(e,t=2){return k.sizeFromShape(e.slice(0,e.length-t))}function oi(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function np(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ii(e),...oi(e)]),t}function yw(e,t=!1){let n=Q().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((a,s)=>s>=e.length-2?k.nearestLargerEven(e[s]):e[s]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=k.squeezeShape(e).newShape);let r=k.sizeFromShape(e);if(e.length<=1&&r<=n)return[1,r];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let a=ii(e),s=2,i=2;return e.length&&([s,i]=oi(e)),r=a*(s/2)*(i/2),k.sizeToSquarishShape(r).map(o=>o*2)}return k.sizeToSquarishShape(r)}function rp(e){return e%2==0}function sc(e,t){if(e=e.slice(-2),t=t.slice(-2),k.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r||rp(n)&&rp(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&rp(e[0])&&rp(t[0])}var ap,sp;function gw(e){if(ap==null){let t=Lr(e);ap=t.getParameter(t.MAX_TEXTURE_SIZE)}return ap}function FO(){ap=null}function MO(){sp=null}function xw(e){if(sp==null){let t=Lr(e);sp=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,sp)}function ww(e){if(e===0)return 0;let t,n=Lr(e);return Bn(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:Bn(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function Bn(e,t){return e.getExtension(t)!=null}function _A(e){try{if(Lr(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function _w(e){if(e===0)return!1;let t=Lr(e);if(e===1){if(!Bn(t,"OES_texture_float"))return!1}else if(!Bn(t,"EXT_color_buffer_float"))return!1;return kA(t)}function bw(e){if(e===0)return!1;let t=Lr(e);if(e===1){if(!Bn(t,"OES_texture_float")||!Bn(t,"WEBGL_color_buffer_float"))return!1}else{if(Bn(t,"EXT_color_buffer_float"))return kA(t);let n="EXT_color_buffer_half_float";if(Bn(t,n)){let r=t.getExtension(n);return UO(t,r)}return!1}return kA(t)}function kA(e){let t=vA(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,a=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,a,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(s),i}function UO(e,t){let n=vA(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let a=1,s=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,a,s,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(i),o}function vw(e){return e!==2?!1:Lr(e).fenceSync!=null}function fl(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var $e=Q();$e.registerFlag("HAS_WEBGL",()=>$e.getNumber("WEBGL_VERSION")>0);$e.registerFlag("WEBGL_VERSION",()=>_A(2)?2:_A(1)?1:0);$e.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);$e.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>$e.get("WEBGL_VERSION")===2);$e.registerFlag("WEBGL_CPU_FORWARD",()=>!0);$e.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);$e.registerFlag("WEBGL_PACK",()=>$e.getBool("HAS_WEBGL"));$e.registerFlag("WEBGL_PACK_NORMALIZATION",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_CLIP",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>!1);$e.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_PACK_REDUCE",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_LAZILY_UNPACK",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_CONV_IM2COL",()=>$e.getBool("WEBGL_PACK"));$e.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>gw($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>xw($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=$e.getNumber("WEBGL_VERSION");return e===0?0:ww(e)});$e.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>$e.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Kh.isMobile());$e.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>_w($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>$e.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:$e.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));$e.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>bw($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_FENCE_API_ENABLED",()=>vw($e.getNumber("WEBGL_VERSION")));$e.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>$e.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);$e.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});function on(){let e,t,n,r,a,s,i,o,l,c;return Q().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",a="texture",s="outputColor",i="out vec4 outputColor;",o=`
|
|
bool isnan_custom(float val) {
|
|
return (val > 0.0 || val < 0.0) ? false : val != 0.0;
|
|
}
|
|
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan_custom(val.x),
|
|
isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));
|
|
}
|
|
|
|
#define isnan(value) isnan_custom(value)
|
|
`,l="",c=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(e="",t="attribute",n="varying",r="varying",a="texture2D",s="gl_FragColor",i="",o=`
|
|
#define isnan(value) isnan_custom(value)
|
|
bool isnan_custom(float val) {
|
|
return (val > 0. || val < 1. || val == 0.) ? false : true;
|
|
}
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
|
|
}
|
|
`,l=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,c=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:a,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:c}}function ui(e,t,n="index"){let r=k.computeStrides(t);return r.map((a,s)=>{let i=`int ${e[s]} = ${n} / ${a}`,o=s===r.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * ${a}`:`index -= ${e[s]} * ${a}`;return`${i}; ${o};`}).join("")}function IA(e){let t=k.computeStrides(e).map(n=>n.toString());return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
|
|
}
|
|
`}var Iw=`
|
|
const float FLOAT_MAX = 1.70141184e38;
|
|
const float FLOAT_MIN = 1.17549435e-38;
|
|
|
|
lowp vec4 encode_float(highp float v) {
|
|
if (isnan(v)) {
|
|
return vec4(255, 255, 255, 255);
|
|
}
|
|
|
|
highp float av = abs(v);
|
|
|
|
if(av < FLOAT_MIN) {
|
|
return vec4(0.0, 0.0, 0.0, 0.0);
|
|
} else if(v > FLOAT_MAX) {
|
|
return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;
|
|
} else if(v < -FLOAT_MAX) {
|
|
return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;
|
|
}
|
|
|
|
highp vec4 c = vec4(0,0,0,0);
|
|
|
|
highp float e = floor(log2(av));
|
|
highp float m = exp2(fract(log2(av))) - 1.0;
|
|
|
|
c[2] = floor(128.0 * m);
|
|
m -= c[2] / 128.0;
|
|
c[1] = floor(32768.0 * m);
|
|
m -= c[1] / 32768.0;
|
|
c[0] = floor(8388608.0 * m);
|
|
|
|
highp float ebias = e + 127.0;
|
|
c[3] = floor(ebias / 2.0);
|
|
ebias -= c[3] * 2.0;
|
|
c[2] += floor(ebias) * 128.0;
|
|
|
|
c[3] += 128.0 * step(0.0, -v);
|
|
|
|
return c / 255.0;
|
|
}
|
|
`,HO=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=ic.DENSE;let t=lc(e),n=on();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for (int i=0; i<4; i++) {
|
|
int flatIndex = index + i;
|
|
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
|
|
result[i] = getA(rc.x, rc.y, rc.z);
|
|
}
|
|
|
|
${n.output} = result;
|
|
}
|
|
`}},jO=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=ic.DENSE;let t=lc(e),n=on();this.outputShape=e,this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for (int i=0; i<4; i++) {
|
|
int flatIndex = index + i;
|
|
ivec3 rc = outCoordsFromFlatIndex(flatIndex);
|
|
result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));
|
|
}
|
|
|
|
${n.output} = result;
|
|
}
|
|
`}},GO=class{constructor(e){this.variableNames=["A"],this.outTexUsage=Vn.DOWNLOAD;let t=on();this.outputShape=e,this.userCode=`
|
|
${Iw}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},qO=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Vn.DOWNLOAD;let t=on();this.outputShape=e,this.userCode=`
|
|
${Iw}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},XO=class{constructor(e,t,n=!1){this.variableNames=["A"];let r=on(),[a,s]=t;this.outputShape=e;let i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode=`
|
|
${IA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
int flatIndex = getFlatIndex(coords);
|
|
int offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / ${s};
|
|
int c = imod(flatIndex, ${s});
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);
|
|
vec4 values = ${r.texture2D}(A, uv);
|
|
|
|
float result;
|
|
|
|
if(offset == 0) {
|
|
result = values[0];
|
|
} else if(offset == 1) {
|
|
result = values[1];
|
|
} else if(offset == 2) {
|
|
result = values[2];
|
|
} else {
|
|
result = values[3];
|
|
}
|
|
|
|
${r.output} = vec4(${i}, 0., 0., 0.);
|
|
}
|
|
`}},KO=class{constructor(e,t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let r=on(),[a,s]=t;this.outputShape=e;let i="",o="result";n&&(o="floor(result * 255. + 0.5)");for(let l=0;l<=1;l++)for(let c=0;c<=1;c++){let u=l*2+c;i+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${c} < ${e[2]}) {
|
|
localCoords[2] += ${c};
|
|
if(localCoords[1] + ${l} < ${e[1]}) {
|
|
localCoords[1] += ${l};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
r = flatIndex / ${s};
|
|
c = imod(flatIndex, ${s});
|
|
uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);
|
|
values = ${r.texture2D}(A, uv);
|
|
|
|
if(offset == 0) {
|
|
result[${u}] = values[0];
|
|
} else if(offset == 1) {
|
|
result[${u}] = values[1];
|
|
} else if(offset == 2) {
|
|
result[${u}] = values[2];
|
|
} else {
|
|
result[${u}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${IA(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${i}
|
|
|
|
${r.output} = ${o};
|
|
}
|
|
`}},v0={};ze(v0,{bindVertexProgramAttributeStreams:()=>$w,createBufferFromOutputTexture:()=>zw,createFloat16MatrixTexture:()=>Cw,createFloat16PackedMatrixTexture:()=>Mw,createFloat32MatrixTexture:()=>Ew,createIndexBuffer:()=>Tw,createPackedMatrixTexture:()=>Fw,createUnsignedBytesMatrixTexture:()=>Rw,createVertexBuffer:()=>Sw,createVertexShader:()=>Nw,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Lw,downloadFloat32MatrixFromBuffer:()=>Pw,downloadMatrixFromPackedOutputTexture:()=>Bw,downloadPackedMatrixFromBuffer:()=>Ww,getInternalFormatForFloat16MatrixTexture:()=>SA,getInternalFormatForFloat16PackedMatrixTexture:()=>CA,getInternalFormatForFloat32MatrixTexture:()=>NA,getInternalFormatForPackedMatrixTexture:()=>EA,getInternalFormatForUnsignedBytesMatrixTexture:()=>TA,uploadDenseMatrixToTexture:()=>Dw,uploadPixelDataToTexture:()=>Ow});function Nw(e){let t=on(),n=`${t.version}
|
|
precision highp float;
|
|
${t.attribute} vec3 clipSpacePos;
|
|
${t.attribute} vec2 uv;
|
|
${t.varyingVs} vec2 resultUV;
|
|
|
|
void main() {
|
|
gl_Position = vec4(clipSpacePos, 1);
|
|
resultUV = uv;
|
|
}`;return rw(e,n)}function Sw(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return ow(e,t)}function Tw(e){let t=new Uint16Array([0,1,2,2,1,3]);return lw(e,t)}function uc(e,t,n,r,a,s){cw(t,n);let i=uw(e),o=e.TEXTURE_2D;return _e(e,()=>e.bindTexture(o,i)),_e(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),_e(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),_e(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),_e(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),_e(e,()=>e.texImage2D(o,0,r,t,n,0,a,s,null)),_e(e,()=>e.bindTexture(e.TEXTURE_2D,null)),i}function NA(e){return e.internalFormatFloat}function Ew(e,t,n,r){let[a,s]=oc(t,n);return uc(e,a,s,NA(r),r.textureFormatFloat,e.FLOAT)}function SA(e){return e.internalFormatHalfFloat}function Cw(e,t,n,r){let[a,s]=oc(t,n);return uc(e,a,s,SA(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function TA(e){return e.downloadTextureFormat}function Rw(e,t,n,r){let[a,s]=oc(t,n);return uc(e,a,s,TA(r),e.RGBA,e.UNSIGNED_BYTE)}function EA(e){return e.internalFormatPackedFloat}function Fw(e,t,n,r){let[a,s]=ml(t,n);return uc(e,a,s,EA(r),e.RGBA,e.FLOAT)}function CA(e){return e.internalFormatPackedHalfFloat}function Mw(e,t,n,r){let[a,s]=ml(t,n);return uc(e,a,s,CA(r),e.RGBA,r.textureTypeHalfFloat)}function $w(e,t,n){let r=0,a=3*4,s=3*4+2*4;return _e(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),xA(e,t,"clipSpacePos",n,3,s,r)&&xA(e,t,"uv",n,2,s,a)}function Dw(e,t,n,r,a,s){_e(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;a instanceof Uint8Array?(i=new Uint8Array(n*r*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*r*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(a),_e(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,o,i)),_e(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function Ow(e,t,n){_e(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?_e(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):_e(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),_e(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function zw(e,t,n,r){let a=e.createBuffer();_e(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,a));let s=4*4*t*n;return _e(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),_e(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),_e(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),a}function Pw(e,t,n){let r=e,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function Lw(e,t,n,r){let[a,s]=oc(t,n),i=4,o=new Uint8Array(OO(t*n,i));return _e(e,()=>e.readPixels(0,0,a,s,r.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function Ww(e,t,n,r,a,s,i,o){let l=e,c=new Float32Array(zO(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,c),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),c}function Bw(e,t,n){let r=new Float32Array(t*n*4);return _e(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var Am=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=Q().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,mm(t,e)):this.gl=Lr(t);let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(Q().getNumber("WEBGL_VERSION")===1){let a="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=rc(this.gl,a),Bn(this.gl,s))this.textureHalfFloatExtension=rc(this.gl,s);else if(Q().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),Bn(this.gl,r))this.colorBufferHalfFloatExtension=rc(this.gl,r);else if(Q().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",Bn(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(Bn(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Sw(this.gl),this.indexBuffer=Tw(this.gl),this.framebuffer=hw(this.gl),this.textureConfig=vA(this.gl,this.textureHalfFloatExtension)}get debug(){return Q().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;_e(e,()=>e.finish()),_e(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),_e(e,()=>e.deleteFramebuffer(this.framebuffer)),_e(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),_e(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),_e(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),Ew(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Cw(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Rw(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),Ow(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),Dw(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Mw(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),Fw(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(wA(this.gl,this.framebuffer),this.outputTexture=null),_e(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Lw(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,a,s){return Ww(this.gl,e,t,n,r,a,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Pw(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=zw(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(Q().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,a=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let s=r.clientWaitSync(a,0,0);return s===r.ALREADY_SIGNALED||s===r.CONDITION_SATISFIED},t=a}else Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>Bw(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl,n=aw(t,e),r=Nw(t),a=sw(t);return _e(t,()=>t.attachShader(a,r)),_e(t,()=>t.attachShader(a,n)),iw(t,a),this.debug&&ep(t,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=$w(t,this.program,this.vertexBuffer)),a}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&_e(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&ep(this.gl,this.program),_e(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?pw(this.gl,e,t):fw(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),_e(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),mw(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,a]=ml(t,n);this.setOutputMatrixTextureDriver(e,r,a)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&ep(this.gl,this.program),ac(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),_e(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),_e(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=rc(this.gl,Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.createQuery();return n.beginQuery(r.TIME_ELAPSED_EXT,a),a}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await k.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),a=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),a&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),r=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=ZO(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&k.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),tp(this.gl,e,this.framebuffer),this.debug&&ac(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(tp(this.gl,this.outputTexture,this.framebuffer),this.debug&&ac(this.gl)):wA(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let r=this.gl;tp(r,e,this.framebuffer),this.debug&&ac(r),this.outputTexture=e,_e(r,()=>r.viewport(0,0,t,n)),_e(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),_e(this.gl,()=>this.gl.scissor(e,t,n,r))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function ZO(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{getBroadcastDims:Vw}=C;function sz(e,t,n,r){let a=[];e.forEach(p=>{let f=k.sizeFromShape(p.shapeInfo.logicalShape);p.shapeInfo.isUniform?a.push(`uniform float ${p.name}${f>1?`[${f}]`:""};`):(a.push(`uniform sampler2D ${p.name};`),a.push(`uniform int offset${p.name};`))});let s=a.join(`
|
|
`),i=e.map(p=>JO(p,t,r)).join(`
|
|
`),o=t.texShape,l=on(),c=ez(l),u,h,d=rz(l);return t.isPacked?(u=YO(t.logicalShape,o),h=nz(l)):(u=QO(t.logicalShape,o),h=tz(l)),r&&(d+=az),[d,c,h,s,u,i,n].join(`
|
|
`)}function Al(e){let t=e.shapeInfo.logicalShape;switch(t.length){case 0:return iz(e);case 1:return oz(e);case 2:return lz(e);case 3:return uz(e);case 4:return cz(e);case 5:return hz(e);case 6:return dz(e);default:throw new Error(`${t.length}-D input sampling is not yet supported`)}}function Uw(e){switch(e.shapeInfo.logicalShape.length){case 0:return pz(e);case 1:return fz(e);case 2:return mz(e);case 3:return Az(e);default:return yz(e)}}function JO(e,t,n=!1){let r="";n?r+=Uw(e):r+=Al(e);let a=e.shapeInfo.logicalShape,s=t.logicalShape;return a.length<=s.length&&(n?r+=gz(e,t):r+=xz(e,t)),r}function YO(e,t){switch(e.length){case 0:return Hw();case 1:return wz(e,t);case 2:return vz(e,t);case 3:return _z(e,t);default:return bz(e,t)}}function QO(e,t){switch(e.length){case 0:return Hw();case 1:return kz(e,t);case 2:return Ez(e,t);case 3:return Iz(e,t);case 4:return Nz(e,t);case 5:return Sz(e,t);case 6:return Tz(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function ez(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function tz(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function nz(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function rz(e){return`${e.version}
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
${e.varyingFs} vec2 resultUV;
|
|
${e.defineOutput}
|
|
const vec2 halfCR = vec2(0.5, 0.5);
|
|
|
|
struct ivec5
|
|
{
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int w;
|
|
int u;
|
|
};
|
|
|
|
struct ivec6
|
|
{
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int w;
|
|
int u;
|
|
int v;
|
|
};
|
|
|
|
uniform float NAN;
|
|
${e.defineSpecialNaN}
|
|
${e.defineSpecialInf}
|
|
${e.defineRound}
|
|
|
|
int imod(int x, int y) {
|
|
return x - y * (x / y);
|
|
}
|
|
|
|
int idiv(int a, int b, float sign) {
|
|
int res = a / b;
|
|
int mod = imod(a, b);
|
|
if (sign < 0. && mod != 0) {
|
|
res -= 1;
|
|
}
|
|
return res;
|
|
}
|
|
|
|
//Based on the work of Dave Hoskins
|
|
//https://www.shadertoy.com/view/4djSRW
|
|
#define HASHSCALE1 443.8975
|
|
float random(float seed){
|
|
vec2 p = resultUV * seed;
|
|
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);
|
|
p3 += dot(p3, p3.yzx + 19.19);
|
|
return fract((p3.x + p3.y) * p3.z);
|
|
}
|
|
|
|
${Cz}
|
|
${Rz}
|
|
${Fz}
|
|
`}var Cz=`
|
|
vec2 uvFromFlat(int texNumR, int texNumC, int index) {
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {
|
|
int texelIndex = index / 2;
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,Rz=`
|
|
vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,
|
|
int texNumC, int row, int col) {
|
|
int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,Fz=`
|
|
vec2 packedUVfrom3D(int texNumR, int texNumC,
|
|
int texelsInBatch, int texelsInLogicalRow, int b,
|
|
int row, int col) {
|
|
int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,az=`
|
|
float getChannel(vec4 frag, vec2 innerDims) {
|
|
vec2 modCoord = mod(innerDims, 2.);
|
|
return modCoord.x == 0. ?
|
|
(modCoord.y == 0. ? frag.r : frag.g) :
|
|
(modCoord.y == 0. ? frag.b : frag.a);
|
|
}
|
|
float getChannel(vec4 frag, int dim) {
|
|
float modCoord = mod(float(dim), 2.);
|
|
return modCoord == 0. ? frag.r : frag.g;
|
|
}
|
|
`;function Hw(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function wz(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return n[0]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ${n[1]}.0);
|
|
}
|
|
`:n[1]===1?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ${n[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
return 2 * (resTexRC.x * ${n[1]} + resTexRC.y);
|
|
}
|
|
`}function kz(e,t){return t[0]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * ${t[1]}.0);
|
|
}
|
|
`:t[1]===1?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * ${t[0]}.0);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
return resTexRC.x * ${t[1]} + resTexRC.y;
|
|
}
|
|
`}function _z(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),a=r*Math.ceil(e[1]/2);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`}function Iz(e,t){let n=ui(["r","c","d"],e);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${n}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}function bz(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),a=r*Math.ceil(e[e.length-2]/2),s=a,i="",o="b, r, c";for(let l=2;l<e.length-1;l++)s*=e[e.length-l-1],i=`
|
|
int b${l} = index / ${s};
|
|
index -= b${l} * ${s};
|
|
`+i,o=`b${l}, `+o;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
|
|
${i}
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec${e.length}(${o});
|
|
}
|
|
`}function Nz(e,t){let n=ui(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${n}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function Sz(e,t){let n=ui(["r","c","d","d2","d3"],e);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
|
|
${t[1]}));
|
|
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}function Tz(e,t){let n=ui(["r","c","d","d2","d3","d4"],e);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}function vz(e,t){let n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(k.arraysEqual(e,t))return`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${n[0]}, ${n[1]}));
|
|
}
|
|
`;let r=Math.ceil(e[1]/2);return`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${n[0]}, ${n[1]}));
|
|
|
|
int index = resTexRC.x * ${n[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function Ez(e,t){return k.arraysEqual(e,t)?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
|
|
}
|
|
`:e[1]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:e[0]===1?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
int r = index / ${e[1]};
|
|
int c = index - r * ${e[1]};
|
|
return ivec2(r, c);
|
|
}
|
|
`}function ci(e){return`offset${e}`}function pz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=on();return`
|
|
vec4 ${n}() {
|
|
return ${r.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function iz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`float ${n}() {return ${t};}`;let[r,a]=e.shapeInfo.texShape;if(r===1&&a===1)return`
|
|
float ${n}() {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let[s,i]=e.shapeInfo.texShape,o=ci(t);return`
|
|
float ${n}() {
|
|
vec2 uv = uvFromFlat(${s}, ${i}, ${o});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function fz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=e.shapeInfo.texShape,a=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)],s=on();return`
|
|
vec4 ${n}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${a[0]}, ${a[1]}, index);
|
|
return ${s.texture2D}(${t}, uv);
|
|
}
|
|
`}function oz(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${n}(int index) {
|
|
${yl(e)}
|
|
}
|
|
`;let r=e.shapeInfo.texShape,a=r[0],s=r[1];if(s===1&&a===1)return`
|
|
float ${n}(int index) {
|
|
return sampleTexture(${t}, halfCR);
|
|
}
|
|
`;let i=ci(t);return s===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / ${a}.0);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:a===1?`
|
|
float ${n}(int index) {
|
|
vec2 uv = vec2((float(index + ${i}) + 0.5) / ${s}.0, 0.5);
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`:`
|
|
float ${n}(int index) {
|
|
vec2 uv = uvFromFlat(${a}, ${s}, index + ${i});
|
|
return sampleTexture(${t}, uv);
|
|
}
|
|
`}function mz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=a[0],i=a[1],o=on();if(a!=null&&k.arraysEqual(t,a))return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${i}.0, ${s}.0);
|
|
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`;let l=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],c=Math.ceil(t[1]/2);return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${c}, ${l[0]}, ${l[1]}, row, col);
|
|
return ${o.texture2D}(${n}, uv);
|
|
}
|
|
`}function lz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape;if(a!=null&&k.arraysEqual(t,a)){let h=a[0],d=a[1];return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}let{newShape:s,keptDims:i}=k.squeezeShape(t),o=s;if(o.length<t.length){let h=gl(e,o),d=["row","col"];return`
|
|
${Al(h)}
|
|
float ${r}(int row, int col) {
|
|
return ${r}(${xl(d,i)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${t[1]}, 1)));
|
|
${yl(e)}
|
|
}
|
|
`;let l=a[0],c=a[1],u=ci(n);return c===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${u}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${l}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:l===1?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${u}), vec3(${t[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${c}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${t[1]} + col + ${u};
|
|
vec2 uv = uvFromFlat(${l}, ${c}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Az(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];if(t[0]===1){let h=t.slice(1),d=[1,2],p=gl(e,h),f=["b","row","col"];return`
|
|
${Uw(p)}
|
|
vec4 ${r}(int b, int row, int col) {
|
|
return ${r}(${xl(f,d)});
|
|
}
|
|
`}let i=s[0],o=s[1],l=Math.ceil(t[2]/2),c=l*Math.ceil(t[1]/2),u=on();return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${i}, ${o}, ${c}, ${l}, b, row, col);
|
|
return ${u.texture2D}(${n}, uv);
|
|
}
|
|
`}function uz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[1]*t[2],s=t[2],{newShape:i,keptDims:o}=k.squeezeShape(t),l=i;if(l.length<t.length){let f=gl(e,l),m=["row","col","depth"];return`
|
|
${Al(f)}
|
|
float ${r}(int row, int col, int depth) {
|
|
return ${r}(${xl(m,o)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${a}, ${s}, 1)));
|
|
${yl(e)}
|
|
}
|
|
`;let c=e.shapeInfo.texShape,u=c[0],h=c[1],d=e.shapeInfo.flatOffset;if(h===a&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${u}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===s&&d==null)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${t[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${h}.0, ${u}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=ci(n);return`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a} + col * ${s} + depth + ${p};
|
|
vec2 uv = uvFromFlat(${u}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function yz(e){let t=e.shapeInfo.logicalShape,n=t.length,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],o=i[0],l=i[1],c=Math.ceil(t[n-1]/2),u=c*Math.ceil(t[n-2]/2),h="int b, int row, int col",d=`b * ${u} + (row / 2) * ${c} + (col / 2)`;for(let f=2;f<n-1;f++)h=`int b${f}, `+h,u*=t[n-f-1],d=`b${f} * ${u} + `+d;let p=on();return`
|
|
vec4 ${a}(${h}) {
|
|
int index = ${d};
|
|
int texR = index / ${l};
|
|
int texC = index - texR * ${l};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${l}, ${o});
|
|
return ${p.texture2D}(${r}, uv);
|
|
}
|
|
`}function cz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[3],s=t[2]*a,i=t[1]*s,{newShape:o,keptDims:l}=k.squeezeShape(t);if(o.length<t.length){let f=gl(e,o),m=["row","col","depth","depth2"];return`
|
|
${Al(f)}
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
return ${r}(${xl(m,l)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${i}, ${s}, ${a}, 1)));
|
|
${yl(e)}
|
|
}
|
|
`;let c=e.shapeInfo.flatOffset,u=e.shapeInfo.texShape,h=u[0],d=u[1];if(d===i&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(d===a&&c==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${t[1]*t[2]}, ${t[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let p=ci(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${i} + col * ${s} +
|
|
depth * ${a} + depth2;
|
|
vec2 uv = uvFromFlat(${h}, ${d}, index + ${p});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function hz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[4],s=t[3]*a,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:c}=k.squeezeShape(t);if(l.length<t.length){let m=gl(e,l),A=["row","col","depth","depth2","depth3"];return`
|
|
${Al(m)}
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${r}(${xl(A,c)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, ${a})) +
|
|
depth3;
|
|
${yl(e)}
|
|
}
|
|
`;let u=e.shapeInfo.flatOffset,h=e.shapeInfo.texShape,d=h[0],p=h[1];if(p===o&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${i}, ${s}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(p===a&&u==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${p}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=ci(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} + depth * ${s} +
|
|
depth2 * ${a} + depth3 + ${f};
|
|
vec2 uv = uvFromFlat(${d}, ${p}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function dz(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:a,keptDims:s}=k.squeezeShape(t);if(a.length<t.length){let A=gl(e,a),y=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${Al(A)}
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${r}(${xl(y,s)});
|
|
}
|
|
`}let i=t[5],o=t[4]*i,l=t[3]*o,c=t[2]*l,u=t[1]*c;if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${u}, ${c}, ${l}, ${o})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${i}, 1)));
|
|
${yl(e)}
|
|
}
|
|
`;let h=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,p=d[0],f=d[1];if(f===u&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${c}, ${l}, ${o}, ${i})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(f===i&&h==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${p}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=ci(n);return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${u} + col * ${c} + depth * ${l} +
|
|
depth2 * ${o} + depth3 * ${i} + depth4 + ${m};
|
|
vec2 uv = uvFromFlat(${p}, ${f}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function yl(e){let t=e.name,n=k.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function gz(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=Vw(e.shapeInfo.logicalShape,t.logicalShape),l=ht(i),c=i-s,u,h=["x","y","z","w","u","v"];s===0?u="":i<2&&o.length>=1?u="coords = 0;":u=o.map(A=>`coords.${h[A+c]} = 0;`).join(`
|
|
`);let d="";i<2&&s>0?d="coords":d=e.shapeInfo.logicalShape.map((A,y)=>`coords.${h[y+c]}`).join(", ");let p="return outputValue;",f=k.sizeFromShape(e.shapeInfo.logicalShape)===1,m=k.sizeFromShape(t.logicalShape)===1;if(s===1&&!f&&!m)p=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(f&&!m)i===1?p=`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:p=`
|
|
return vec4(outputValue.x);
|
|
`;else if(o.length){let A=s-2,y=s-1;o.indexOf(A)>-1&&o.indexOf(y)>-1?p="return vec4(outputValue.x);":o.indexOf(A)>-1?p="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(p="return vec4(outputValue.xx, outputValue.zz);")}return`
|
|
vec4 ${a}() {
|
|
${l} coords = getOutputCoords();
|
|
${u}
|
|
vec4 outputValue = get${r}(${d});
|
|
${p}
|
|
}
|
|
`}function xz(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&k.arraysEqual(i,s))return`
|
|
float ${a}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let c=ht(l),u=Vw(e.shapeInfo.logicalShape,t.logicalShape),h=l-o,d,p=["x","y","z","w","u","v"];o===0?d="":l<2&&u.length>=1?d="coords = 0;":d=u.map(m=>`coords.${p[m+h]} = 0;`).join(`
|
|
`);let f="";return l<2&&o>0?f="coords":f=e.shapeInfo.logicalShape.map((m,A)=>`coords.${p[A+h]}`).join(", "),`
|
|
float ${a}() {
|
|
${c} coords = getOutputCoords();
|
|
${d}
|
|
return get${r}(${f});
|
|
}
|
|
`}function ht(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function gl(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function xl(e,t){return t.map(n=>e[n]).join(", ")}function Mz(e,t,n,r){let a=t.userCode,s=n.map((p,f)=>{let m={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(m.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[f],shapeInfo:m}}),i=s.map(p=>p.shapeInfo),o={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=sz(s,o,a,t.packedInputs),c=e.createProgram(l),u=null,h=e.getUniformLocation(c,"NAN",!1);Q().getNumber("WEBGL_VERSION")===1&&(u=e.getUniformLocation(c,"INFINITY",!1));let d={};for(let p=0;p<t.variableNames.length;p++){let f=t.variableNames[p],m=!1;d[f]=e.getUniformLocation(c,f,m),d[`offset${f}`]=e.getUniformLocation(c,`offset${f}`,m)}return{program:t,source:l,webGLProgram:c,uniformLocations:d,inShapeInfos:i,outShapeInfo:o,infLoc:u,nanLoc:h}}function jw(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,r)=>{let a=n.logicalShape,s=t[r],i=s.shape;if(!k.arraysEqual(a,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${a} and ${i} must match`);if(n.isUniform&&s.isUniform)return;let o=n.texShape,l=s.isUniform?null:s.texData.texShape;if(!k.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function $z(e,t,n,r,a){jw(t.inShapeInfos,n),jw([t.outShapeInfo],[r]);let s=r.texData.texture,i=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(s,i[0],i[1]):e.setOutputMatrixTexture(s,i[0],i[1]),e.setProgram(t.webGLProgram),Q().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,Infinity),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((o,l)=>{let c=t.program.variableNames[l],u=t.uniformLocations[c],h=t.uniformLocations[`offset${c}`];if(u!=null){if(o.isUniform){if(k.sizeFromShape(o.shape)<2)e.gl.uniform1f(u,o.uniformValues[0]);else{let d=o.uniformValues;d instanceof Float32Array||(d=new Float32Array(d)),e.gl.uniform1fv(u,d)}return}o.texData.slice!=null&&h!=null&&e.gl.uniform1i(h,o.texData.slice.flatOffset),e.setInputMatrixTexture(o.texData.texture,u,l)}}),a!=null&&a(e,t.webGLProgram),e.executeProgram()}function Dz(e,t,n){let r="";t.concat(n).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0,l=i.isUniform?"uniform":i.texData.texShape;r+=`${i.shape}_${l}_${o}`});let a=e.userCode,s=e.constructor.name;return s+="_"+r+"_"+a,s}var{addImpl:Oz,bincountImpl:Gw,bincountReduceImpl:zz,ceilImpl:Pz,concatImpl:Lz,expImpl:Wz,expm1Impl:Bz,floorImpl:Vz,gatherV2Impl:Uz,greaterImpl:Hz,lessImpl:jz,linSpaceImpl:Gz,logImpl:qz,maxImpl:Xz,maximumImpl:Kz,minimumImpl:Zz,multiplyImpl:Jz,negImpl:Yz,prodImpl:Qz,rangeImpl:eP,rsqrtImpl:tP,simpleAbsImpl:qw,sliceImpl:nP,stridedSliceImpl:rP,subImpl:aP,tileImpl:sP,topKImpl:iP,transposeImpl:RA,uniqueImpl:oP}=fm;function Xw(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function ln(e,t){return t===1?[e]:Xw(e,t)}function lP(e,t){if(e===1)return"rc";let n="";for(let r=0;r<e;r++)n+=t[r],r<e-1&&(n+=",");return n}var dP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e;let t=e.length;if(t===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let n=ln("rc",t),r=ht(t),a=uP(t,e,n),s=cP(t,e[e.length-1],e[e.length-2],n),i=hP(e,n);this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
|
|
if(${a}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${s}
|
|
|
|
setOutput(vec4(${i}));
|
|
}
|
|
}
|
|
`}}};function pP(e,t){let n=[];for(let r=0;r<=1;r++)for(let a=0;a<=1;a++){let s=`${r===0?"r":"rp1"}, ${a===0?"c":"cp1"}`;for(let i=2;i<e;i++)s=`${t[t.length-1-i]},`+s;n.push(s)}return n}function uP(e,t,n){if(e===1)return`rc > ${t[0]}`;let r="";for(let a=e-2;a<e;a++)r+=`${n[a]} >= ${t[a]}`,a<e-1&&(r+="||");return r}function cP(e,t,n,r){if(e===1)return"";let a=r.slice(-2);return`
|
|
int r = ${a[0]};
|
|
int c = ${a[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${t};
|
|
bool rEdge = rp1 >= ${n};
|
|
`}function hP(e,t){let n=e.length,r=pP(n,t);return n===1?`getA(rc),
|
|
rc + 1 >= ${e[0]} ? 0. : getA(rc + 1),
|
|
0, 0`:`getA(${r[0]}),
|
|
cEdge ? 0. : getA(${r[1]}),
|
|
rEdge ? 0. : getA(${r[2]}),
|
|
rEdge || cEdge ? 0. : getA(${r[3]})`}var Kw=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let n="";for(let r=0;r<4;r++){let a="thisRC = rc;";r%2==1&&(a+="thisRC.z += 1;"),r>1&&(a+="thisRC.y += 1;"),n+=`
|
|
${a}
|
|
${r>0?"if(thisRC.y < rows && thisRC.z < cols){":""}
|
|
int flatIndex = getFlatIndex(thisRC);
|
|
|
|
ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);
|
|
vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));
|
|
|
|
result[${r}] =
|
|
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
|
|
${r>0?"}":""}
|
|
`}this.userCode=`
|
|
${fP(t)}
|
|
${IA(e)}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
ivec3 thisRC;
|
|
int rows = ${e[1]};
|
|
int cols = ${e[2]};
|
|
|
|
${n}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function fP(e){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${ui(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var mP=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let r=Jw(t,n),a=Yw(e,r,n);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);let s=Zw(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[a].shift();return this.usedTextures[a].push(o),o}let i;return r===Kt.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===Kt.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===Kt.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===Kt.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===Kt.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,r){if(this.freeTextures==null)return;let a=Jw(n,r),s=Yw(t,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);let i=Zw(t,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),o=Q().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],c=l.indexOf(e);if(c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(c,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function AP(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}function Zw(e,t,n,r,a){let s=yP(t,r),i;if(a){let[l,c]=ml(e[0],e[1]);i=l*c}else{let[l,c]=oc(e[0],e[1]);i=l*c}let o=AP(n,s);return i*o}function yP(e,t){switch(e){case Kt.PACKED_2X2_FLOAT32:return EA(t);case Kt.PACKED_2X2_FLOAT16:return CA(t);case Kt.UNPACKED_FLOAT32:return NA(t);case Kt.UNPACKED_FLOAT16:return SA(t);case Kt.PACKED_4X1_UNSIGNED_BYTE:return TA(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function gP(e){return Q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?Kt.PACKED_2X2_FLOAT32:Kt.UNPACKED_FLOAT32:e?Kt.PACKED_2X2_FLOAT16:Kt.UNPACKED_FLOAT16}function Jw(e,t){if(e===Vn.UPLOAD)return Kt.PACKED_2X2_FLOAT32;if(e===Vn.RENDER||e==null)return gP(t);if(e===Vn.DOWNLOAD||e===Vn.PIXELS)return Kt.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function Yw(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var Ra=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
float unaryOperation(float x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},mr="if (isnan(x)) return x;",xP="return x;",Qw="return abs(x);",wP="return (x >= 0.0) ? x : (exp(x) - 1.0);",_P=mr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,bP=mr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,ip="return x;",vP="return x;",kP=`
|
|
vec4 result;
|
|
|
|
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
|
|
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
|
|
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
|
|
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
|
|
|
|
return result;
|
|
`,IP=`
|
|
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,NP=`
|
|
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,wl=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},SP=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;let t=e.length,n=ln("rc",t),r=ht(t),a=lP(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 packedInput = getA(${a});
|
|
|
|
setOutput(getChannel(packedInput, ${i}));
|
|
}
|
|
`}},TP=Fr.whereImpl,EP=1e-7,CP=1e-4,FA={};function RP(e){return e in FA||(FA[e]={}),FA[e]}var FP=128,MP=600;function $P(){return Q().global.screen==null?1024:Q().global.screen.height*Q().global.screen.width*window.devicePixelRatio*MP/1024/1024}var Vu=class extends nu{constructor(e){super();if(this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.warnedAboutMemory=!1,this.warnedAboutCPUBackend=!1,this.pendingDeletes=0,this.disposed=!1,!Q().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");if(e==null){let t=Lr(Q().getNumber("WEBGL_VERSION"));this.binaryCache=RP(Q().getNumber("WEBGL_VERSION")),this.gpgpu=new Am(t),this.canvas=t.canvas,this.gpgpuCreatedLocally=!0}else this.gpgpu=e,this.binaryCache={},this.gpgpuCreatedLocally=!1,this.canvas=e.gl.canvas;this.textureManager=new mP(this.gpgpu),this.numMBBeforeWarning=$P(),this.texData=new mh(this,Sr())}nextDataId(){return Vu.nextDataId++}numDataIds(){return this.texData.numDataIds()+(this.cpuBackend?this.cpuBackend.numDataIds():0)-this.pendingDeletes}write(e,t,n){if((Q().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||Q().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:Vn.UPLOAD,refCount:1}),r}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,r,a){if(Q().getBool("DEBUG")&&this.checkNumericalProblems(t),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:r,values:t,usage:Vn.UPLOAD,refCount:a})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:a,slice:s,shape:i,isPacked:o}=t;if(s!=null){let h;o?h=new wl(i,ip):h=new Ra(i,ip);let d=this.runWebGLProgram(h,[{dataId:e,shape:i,dtype:r}],r),p=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),p}if(n!=null)return this.convertAndCacheOnCPU(e);if(r==="string")return n;let l=this.activeTimers!=null,c;l&&(c=k.now());let u;if(r==="complex64"){let h=this.readSync(a.real.dataId),d=this.readSync(a.imag.dataId);u=C.mergeRealAndImagArrays(h,d)}else u=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=k.now()-c),this.convertAndCacheOnCPU(e,u)}async read(e){if(this.pendingRead.has(e)){let p=this.pendingRead.get(e);return new Promise(f=>p.push(f))}let t=this.texData.get(e),{values:n,shape:r,slice:a,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(a!=null){let p;o?p=new wl(r,ip):p=new Ra(r,ip);let f=this.runWebGLProgram(p,[{dataId:e,shape:r,dtype:s}],s),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(n!=null)return this.convertAndCacheOnCPU(e);if(!Q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&Q().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,c;if(s!=="complex64"&&Q().get("WEBGL_BUFFER_SUPPORTED")){c=this.decode(e);let p=this.texData.get(c.dataId);l=this.gpgpu.createBufferFromTexture(p.texture,...lc(r))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let u;if(s==="complex64"){let p=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),f=p[0],m=p[1];u=C.mergeRealAndImagArrays(f,m)}else if(l==null)u=this.getValuesFromTexture(e);else{let p=k.sizeFromShape(r);u=this.gpgpu.downloadFloat32MatrixFromBuffer(l,p)}c!=null&&this.disposeIntermediateTensorInfo(c);let h=this.convertAndCacheOnCPU(e,u),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(p=>p(h)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Sr().removeDataId(e,this),this.pendingDeletes--),h}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(r=>k.decodeString(r))}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return We(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!tw(n))throw Q().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:r}=this.texData.get(e),a=k.sizeFromShape(t);if(Q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let h=this.decode(e),d=this.texData.get(h.dataId),p=this.gpgpu.downloadMatrixFromPackedTexture(d.texture,...lc(t)).subarray(0,a);return this.disposeIntermediateTensorInfo(h),p}let s=Q().getBool("WEBGL_PACK")&&r===!0,i=s?np(t):t,o=s?new qO(i):new GO(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),c=this.texData.get(l.dataId),u=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(c.texture,c.texShape[0],c.texShape[1]).subarray(0,a);return this.disposeIntermediateTensorInfo(l),u}timerAvailable(){return Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}async time(e){let t=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();let a=k.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=k.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,r&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(a);i.kernelMs=k.sum(o),i.getExtraProfileInfo=()=>o.map((l,c)=>({name:s[c],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:k.now(),endMs:null}}endTimer(e){return Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=k.now(),e)}async getQueryTime(e){if(Q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:a,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,a,s)));let c=this.texData.get(e);c.texture=null,c.texShape=null,c.isPacked=!1,c.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}getCPUBackend(){return Q().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=Sr().findBackend("cpu")),this.cpuBackend):null}shouldExecuteOnCPU(e,t=FP){let n=this.getCPUBackend();return!Q().getBool("IS_TEST")&&!this.warnedAboutCPUBackend&&n==null&&(console.warn("Your application contains ops that are small enough to be executed on the CPU backend, however the CPU backend cannot be found. Consider importing the CPU backend (@tensorflow/tfjs-backend-cpu) for better performance."),this.warnedAboutCPUBackend=!0),n!=null&&e.every(r=>this.texData.get(r.dataId).texture==null&&k.sizeFromShape(r.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){C.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return TP(e.shape,t)}packedUnaryOp(e,t,n){let r=new wl(e.shape,t),a=this.compileAndRun(r,[e],n);return Sr().makeTensorFromDataId(a.dataId,a.shape,a.dtype)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let r=qw(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,r)}if(Q().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Qw,e.dtype);let t=new Ra(e.shape,Qw),n=this.compileAndRun(t,[e]);return Sr().makeTensorFromDataId(n.dataId,n.shape,n.dtype)}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&k.isString(n[0])){let a=n.map(s=>k.encodeString(s));r=this.write(a,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){let{dataId:r}=this.makeTensorInfo(e,t,n);return Sr().makeTensorFromDataId(r,e,t,this)}unpackTensor(e){let t=new SP(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new dP(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[ii(e.shape),...oi(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},a=[ii(t),...oi(t)],s=new Kw(a,n),i=!0,o=this.runWebGLProgram(s,[r],e.dtype,null,i);return{dataId:o.dataId,shape:t,dtype:o.dtype}}decode(e){let t=this.texData.get(e),{isPacked:n,shape:r,dtype:a}=t,s=np(r),i;n?i=new jO(s):i=new HO(s);let o=!0,l=this.runWebGLProgram(i,[{shape:s,dtype:a,dataId:e}],a,null,o);return{dtype:a,shape:r,dataId:l.dataId}}runWebGLProgram(e,t,n,r,a=!1){let s=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(s.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===ic.DENSE){let f=lc(e.outputShape);i.texShape=f.map(m=>m*2)}if(e.outTexUsage!=null&&(i.usage=e.outTexUsage),k.sizeFromShape(s.shape)===0)return i.values=k.getTypedArrayFromDType(s.dtype,0),s;let o=[],l=t.map(f=>{if(f.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let m=this.texData.get(f.dataId);if(m.texture==null){if(!e.packedInputs&&k.sizeFromShape(f.shape)<=Q().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:f.shape,texData:null,isUniform:!0,uniformValues:m.values};e.packedInputs&&(m.isPacked=!0,m.shape=f.shape)}else if(!!m.isPacked!=!!e.packedInputs)f=m.isPacked?this.unpackTensor(f):this.packTensor(f),o.push(f),m=this.texData.get(f.dataId);else if(m.isPacked&&!sc(m.shape,f.shape)){let A=f,y=f.shape;f.shape=m.shape,f=this.packedReshape(f,y),o.push(f),m=this.texData.get(f.dataId),A.shape=y}return this.uploadToGPU(f.dataId),{shape:f.shape,texData:m,isUniform:!1}});this.uploadToGPU(s.dataId);let c={shape:s.shape,texData:i,isUniform:!1},u=Dz(e,l,c),h=this.getAndSaveBinary(u,()=>Mz(this.gpgpu,e,l,c)),d=this.activeTimers!=null,p;if(d&&(p=this.startTimer()),$z(this.gpgpu,h,l,c,r),o.forEach(f=>this.disposeIntermediateTensorInfo(f)),d&&(p=this.endTimer(p),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(p)})),!Q().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&a===!1){let f=this.unpackTensor(s);return this.disposeIntermediateTensorInfo(s),f}return s}compileAndRun(e,t,n,r,a=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,a)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(Q().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=U(()=>{if(!Q().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=Q().getBool("DEBUG");Q().set("DEBUG",!1);let t=this.abs(Se(1e-8)).dataSync()[0];if(Q().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?EP:CP}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:a,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,c;l&&(c=k.now());let u=t.texShape;if(u==null&&(u=yw(n,o),t.texShape=u),a!=null){let h=np(n),d,p=u[1],f=u[0],m=a instanceof Uint8Array;o?([p,f]=ml(u[0],u[1]),d=new KO(h,[f,p],m)):d=new XO(h,[f,p],m);let A=this.makeTensorInfo([f,p],r);m?this.texData.get(A.dataId).usage=Vn.PIXELS:this.texData.get(A.dataId).usage=Vn.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(A.dataId),p,f,a);let y=!0,g=this.runWebGLProgram(d,[A],r,null,y),b=this.texData.get(g.dataId);t.texture=b.texture,t.texShape=b.texShape,t.isPacked=b.isPacked,t.usage=b.usage,this.disposeIntermediateTensorInfo(A),this.texData.delete(g.dataId),t.values=null,l&&(this.uploadWaitMs+=k.now()-c)}else{let h=this.acquireTexture(u,i,r,o);t.texture=h}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),t!=null&&(n.values=DP(t,r)),n.values}acquireTexture(e,t,n,r){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${a} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*k.bytesPerElement(t)}};Vu.nextDataId=0;function DP(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let r=0;r<n.length;++r)n[r]=Math.round(e[r]);return n}else throw new Error(`Unknown dtype ${t}`)}var k0="3.1.0";function I0(){Q().set("WEBGL_FORCE_F16_TEXTURES",!0)}Kh.isBrowser()&&vu("webgl",()=>new Vu,2);var z8={forceHalfFloat:I0},e_=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,_l=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},op=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`,cc=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,n);let a=this.outputShape.length,s="";if(r)if(a===0||k.sizeFromShape(this.outputShape)===1)s=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(s=`
|
|
${ht(a)} coords = getOutputCoords();
|
|
`,a===1)s+=`
|
|
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{let i=ln("coords",a);s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[a-2]} + 1) >= ${this.outputShape[a-2]};
|
|
bool nextColOutOfBounds =
|
|
(${i[a-1]} + 1) >= ${this.outputShape[a-1]};
|
|
result.y = nextColOutOfBounds ? 0. : result.y;
|
|
result.z = nextRowOutOfBounds ? 0. : result.z;
|
|
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
|
|
`}this.userCode=`
|
|
vec4 binaryOperation(vec4 a, vec4 b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
vec4 a = getAAtOutCoords();
|
|
vec4 b = getBAtOutCoords();
|
|
|
|
vec4 result = binaryOperation(a, b);
|
|
${s}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function En(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var OP={kernelName:ds,backendName:"webgl",kernelFunc:En};function Fa(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.makeTensorInfo(r.shape,"complex64"),i=n.texData.get(s.dataId),o=En({inputs:{x:r},backend:n}),l=En({inputs:{x:a},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var zP={kernelName:_h,backendName:"webgl",kernelFunc:Fa},t_="return (a < 0.) ? b * a : a;",n_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function PP(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r,i=n.makeTensorInfo([],"float32",k.createScalarValue(s,"float32")),o=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cc(n_,a.shape,i.shape):new _l(t_,a.shape,i.shape),l=n.runWebGLProgram(o,[a,i],a.dtype);return n.disposeIntermediateTensorInfo(i),l}var LP={kernelName:ps,backendName:"webgl",kernelFunc:PP},r_="return (a < 0.) ? b * a : a;",a_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function WP(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cc(a_,r.shape,a.shape):new _l(r_,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}var BP={kernelName:Is,backendName:"webgl",kernelFunc:WP},s_="if (isnan(x)) return x;",VP=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,UP=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`;function Je({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:a,backend:s})=>{let{x:i}=a,o=s,l=r||i.dtype;if(o.shouldExecuteOnCPU([i])&&n!=null){let h=o.texData.get(i.dataId),d=n(h.values,l);return o.makeTensorInfo(i.shape,l,d)}let c=Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,u;return c?u=new wl(i.shape,t):u=new Ra(i.shape,e),o.runWebGLProgram(u,[i],l)}}function Zt({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:a,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:c}=i,u=o;if(r&&l.dtype==="complex64"){let f=u.texData.get(l.dataId),m=u.texData.get(c.dataId),[A,y]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(b=>{let[x,w]=b,_={dataId:x.dataId,dtype:x.dtype,shape:l.shape},N={dataId:w.dataId,dtype:w.dtype,shape:c.shape},T=new _l(e,l.shape,c.shape);return u.runWebGLProgram(T,[_,N],Jn(x.dtype,w.dtype))}),g=Fa({inputs:{real:A,imag:y},backend:u});return u.disposeIntermediateTensorInfo(A),u.disposeIntermediateTensorInfo(y),g}let h=s||Jn(l.dtype,c.dtype);if(u.shouldExecuteOnCPU([l,c])&&a!=null){let f=u.texData.get(l.dataId),m=u.texData.get(c.dataId),[A,y]=a(l.shape,c.shape,f.values,m.values,h),g=u.makeTensorInfo(y,h),b=u.texData.get(g.dataId);return b.values=A,g}let d=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,p;return d?p=new cc(t,l.shape,c.shape,n):p=new _l(e,l.shape,c.shape),u.runWebGLProgram(p,[l,c],h)}}function lp(e,t=!1){if(e==="linear")return t?vP:xP;if(e==="relu")return t?IP:_P;if(e==="elu")return t?kP:wP;if(e==="relu6")return t?NP:bP;if(e==="prelu")return t?a_:r_;if(e==="leakyrelu")return t?n_:t_;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var i_=class{constructor(e,t,n,r=!1,a=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;let c=r?e[1]:e[2],u=Math.ceil(c/2),h=r?"i * 2, rc.y":"rc.y, i * 2",d=a?"rc.z, i * 2":"i * 2, rc.z",p=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=a?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",A="";i&&(o?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${i}
|
|
}`:l?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${i}
|
|
}`:m=`vec4 activation(vec4 x) {
|
|
${i}
|
|
}`,A="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let g="rc.x",b="rc.x";e[0]<t[0]?g=`int(min(float(rc.x), ${e[0]-1}.))`:t[0]<e[0]&&(b=`int(min(float(rc.x), ${t[0]-1}.))`),this.userCode=`
|
|
${m}
|
|
|
|
const float sharedDimension = ${u}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < ${u}; i++) {
|
|
int batchA = ${g};
|
|
int batchB = ${b};
|
|
vec4 a = getMatrixA(batchA, ${h});
|
|
vec4 b = getMatrixB(batchB, ${d});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${p[0]} * ${f[0]});
|
|
result += (${p[1]} * ${f[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${y}
|
|
|
|
${A}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},o_={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},l_=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=C.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`}},u_="return a * b;";function c_(e){let{inputs:t,backend:n}=e,{a:r,b:a}=t,s=C.upcastType(r.dtype,a.dtype);if(r.dtype==="complex64"){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),c=new l_(o_.REAL,r.shape,a.shape),u=new l_(o_.IMAG,r.shape,a.shape),h=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:r.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:r.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:a.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:a.shape}],d=n.runWebGLProgram(c,h,"float32"),p=n.runWebGLProgram(u,h,"float32"),f=Fa({inputs:{real:d,imag:p},backend:n});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}if(n.shouldExecuteOnCPU([r,a])){let o=n.texData.get(r.dataId),l=n.texData.get(a.dataId),[c,u]=Jz(r.shape,a.shape,o.values,l.values,s),h=n.makeTensorInfo(u,s),d=n.texData.get(h.dataId);return d.values=c,h}let i;return Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new cc(u_,r.shape,a.shape):i=new _l(u_,r.shape,a.shape),n.runWebGLProgram(i,[r,a],s)}var HP={kernelName:_s,backendName:"webgl",kernelFunc:c_};function jP(e,t,n){let r=[ii(e.shape),...oi(e.shape)],a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[ii(t),...oi(t)],i=new Kw(s,r),o=!0,l=n.runWebGLProgram(i,[a],e.dtype,null,o);return{dataId:l.dataId,shape:t,dtype:l.dtype}}function ge(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=n,o=k.sizeFromShape(a.shape),l=k.inferFromImplicitShape(s,o),c=k.sizeFromShape(l);k.assert(o===c,()=>`The new shape (${l}) has ${c} elements and the old shape (${a.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let u=i.texData.get(a.dataId);return u.isPacked&&!sc(a.shape,l)&&!(u.texture!==null&&sc(u.shape,l))?jP(a,l,i):(i.incRef(a.dataId),{dataId:a.dataId,shape:l,dtype:a.dtype})}var GP={kernelName:ko,backendName:"webgl",kernelFunc:ge},h_=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i=Math.floor(n/4)*4,o=n%4,l="sumValue += dot(values, ones);";if(t!=null){let u=1/t;l=`sumValue += dot(values * ${k.isInt(u)?u.toPrecision(2):u}, ones);`}let c="";a%n>0&&(c=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return 0.0;
|
|
}
|
|
`),this.userCode=`
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${c}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${i}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${l}
|
|
}
|
|
|
|
int inIdx = inOffset + ${i};
|
|
if (${o===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${l}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},qP=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let c=Math.floor(n/4)*4,u=n%4,h=`
|
|
if (${t==="sum"}) {
|
|
sumValue += dot(values, ones);
|
|
} else if (${t==="prod"}) {
|
|
vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);
|
|
prodValue *= tmp[0] * tmp[1];
|
|
} else {
|
|
minMaxValue = ${o}(values, minMaxValue);
|
|
}
|
|
`,d="vec4";t==="all"?(i="1.0",h=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,d="bvec4"):t==="any"&&(i="0.0",h=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,d="bvec4");let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return initializationValue;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${i};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${p}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
vec4 minMaxValue = vec4(${i});
|
|
float prodValue = 1.0;
|
|
float sumValue = 0.0;
|
|
float allValue = 1.0;
|
|
float anyValue = 0.0;
|
|
|
|
for (int i = 0; i < ${c}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${c};
|
|
if (${u===1}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===2}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===3}) {
|
|
${d} values = ${d}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function XP(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],r=C.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function hi(e,t,n,r){let a=XP(e.shape),s=e;for(let i=0;i<a.length;i++){let{inSize:o,windowSize:l,outSize:c}=a[i],u,h;n==="mean"?u=i===0?new h_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c},o):new h_({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c}):u=new qP({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:c},n),h=s,s=r.runWebGLProgram(u,[s],t),h.dataId!==e.dataId&&r.disposeIntermediateTensorInfo(h)}return s}var ZP=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[t[s]];this.outputShape=n,this.rank=n.length;let r=ht(this.rank),a=KP(t);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function KP(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let a=0;a<e.length;a++)r[e[a]]=n[a];return r.join()}var JP=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let c=0;c<n.length;c++)n[c]=e[t[c]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=ht(this.rank),a=Xw("rc",this.rank),s=new Array(this.rank);for(let c=0;c<t.length;c++)s[t[c]]=a[c];let i=`vec2(${s.slice(-2).join()})`,o=`++${a[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${l};
|
|
if(${o}) {
|
|
result[1] = ${l};
|
|
}
|
|
--${a[this.rank-1]};
|
|
if(++${a[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${l};
|
|
if(${o}) {
|
|
result[3] = ${l};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function up(e,t,n){let r=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new JP(e.shape,t):new ZP(e.shape,t);return n.runWebGLProgram(r,[e],e.dtype)}function YP(e,t,n,r){let a=t,s=e.shape.length,i=k.parseAxisParam(a,e.shape),o=i,l=C.getAxesPermutation(o,s),c=l!=null,u=e;c&&(u=up(e,l,r),o=C.getInnerMostAxes(o.length,s)),C.assertAxesAreInnerMostDims("sum",o,s);let[h,d]=C.computeOutAndReduceShapes(u.shape,o),p=h;n&&(p=C.expandShapeToKeepDim(h,i));let f=k.sizeFromShape(d),m=k.sizeFromShape(e.shape)/f,A=ge({inputs:{x:u},attrs:{shape:[m,f]},backend:r}),y=Xh(e.dtype),g=hi(A,y,"sum",r),b=ge({inputs:{x:g},attrs:{shape:p},backend:r});return r.disposeIntermediateTensorInfo(A),r.disposeIntermediateTensorInfo(g),c&&r.disposeIntermediateTensorInfo(u),b}function MA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;return YP(a,s,i,n)}var QP={kernelName:Ds,backendName:"webgl",kernelFunc:MA};function mn(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{perm:s}=r,i=n,o=a.shape.length,l=new Array(o);for(let u=0;u<l.length;u++)l[u]=a.shape[s[u]];let c;if(i.shouldExecuteOnCPU([a])){let u=i.texData.get(a.dataId).values,h=RA(u,a.shape,a.dtype,s,l);c=i.makeTensorInfo(l,a.dtype);let d=i.texData.get(c.dataId);d.values=h}else c=up(a,s,i);return c}var eL={kernelName:Ws,backendName:"webgl",kernelFunc:mn},d_=1e3;function cp({a:e,b:t,transposeA:n,transposeB:r,backend:a,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let c=e.shape.length,u=t.shape.length,h=n?e.shape[c-2]:e.shape[c-1],d=r?t.shape[u-1]:t.shape[u-2],p=n?e.shape[c-1]:e.shape[c-2],f=r?t.shape[u-2]:t.shape[u-1],m=e.shape.slice(0,-2),A=t.shape.slice(0,-2),y=k.sizeFromShape(m),g=k.sizeFromShape(A),b=y===g||y===1||g===1;k.assert(c>=2&&u>=2&&b,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${m}) and (${A}).`);let x=(y>g?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([p,f]);k.assert(h===d,()=>`Error in matMul: inner shapes (${h}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let w=n?[y,h,p]:[y,p,h],_=r?[g,f,d]:[g,d,f],N=ge({inputs:{x:e},backend:a,attrs:{shape:w}}),T=ge({inputs:{x:t},backend:a,attrs:{shape:_}}),E=[N,T],M=Math.max(y,g),z=n?N.shape[1]:N.shape[2],P=s!=null,B=i!=null,G=l==="leakyrelu",V=l!=null?lp(l,!0):null,K=P||B||G||V!=null,X;if((p===1||f===1)&&z>d_&&K===!1){let J=N,ae=T;n&&(J=mn({inputs:{x:N},backend:a,attrs:{perm:[0,2,1]}}),E.push(J)),r&&(ae=mn({inputs:{x:T},backend:a,attrs:{perm:[0,2,1]}}),E.push(ae));let Y=f!==1,ue=f===1,ne=J;Y&&(ne=ge({inputs:{x:J},backend:a,attrs:{shape:[M,z,1]}}),E.push(ne));let de=f===1?2:1,he=ae;ue&&(he=ge({inputs:{x:ae},backend:a,attrs:{shape:[M,1,z]}}),E.push(he));let me=c_({inputs:{a:ne,b:he},backend:a});X=MA({inputs:{x:me},backend:a,attrs:{axis:de,keepDims:!0}}),E.push(me)}else{let J=Jn(e.dtype,t.dtype),ae=new i_(w,_,[M,p,f],n,r,P,V,B,G),Y=[N,T];if(s!=null&&Y.push(s),B&&Y.push(i),G){let ue=a.makeTensorInfo([],"float32",k.createScalarValue(o,"float32"));Y.push(ue),E.push(ue)}X=a.runWebGLProgram(ae,Y,J)}let ee=ge({inputs:{x:X},backend:a,attrs:{shape:x}});E.push(X);for(let J of E)a.disposeIntermediateTensorInfo(J);return ee}function tL(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r;return cp({a,b:s,transposeA:l,transposeB:c,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:h,activation:u})}var nL={kernelName:Bs,backendName:"webgl",kernelFunc:tL},p_="return abs(x);";function rL(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let s=n.texData.get(r.dataId),i=qw(s.values);return n.makeTensorInfo(r.shape,r.dtype,i)}let a;return Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new wl(r.shape,p_):a=new Ra(r.shape,p_),n.runWebGLProgram(a,[r],r.dtype)}var aL={kernelName:Li,backendName:"webgl",kernelFunc:rL},sL=mr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,iL=Je({opSnippet:sL}),oL={kernelName:Wi,backendName:"webgl",kernelFunc:iL},lL=mr+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,uL=Je({opSnippet:lL}),cL={kernelName:Bi,backendName:"webgl",kernelFunc:uL},f_="return a + b;",hL=Zt({opSnippet:f_,packedOpSnippet:f_,supportsComplex:!0,cpuKernelImpl:Oz}),dL={kernelName:fa,backendName:"webgl",kernelFunc:hL},pL=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`float v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
float result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}},fL=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((a,s)=>`T${s}`);let n=[];this.variableNames.forEach(a=>{n.push(`vec4 v${a} = get${a}AtOutCoords();`)});let r=this.variableNames.map(a=>`v${a}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
vec4 result = ${r};
|
|
setOutput(result);
|
|
}
|
|
`}};function hp(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return En({inputs:{x:r[0]},backend:n});if(r.length>Q().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(r.length/2),l=hp({inputs:r.slice(0,o),backend:n}),c=hp({inputs:r.slice(o),backend:n});return hp({inputs:[l,c],backend:n})}let a=r.map(o=>o.dtype).reduce((o,l)=>Jn(o,l)),s=r.map(o=>o.shape),i=Q().getBool("WEBGL_PACK")?new fL(r[0].shape,s):new pL(r[0].shape,s);return n.runWebGLProgram(i,r,a)}var mL={kernelName:Ka,backendName:"webgl",kernelFunc:hp};function AL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=C.getAxesPermutation(c,o),h=a;u!=null&&(h=mn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=C.getInnerMostAxes(c.length,o)),C.assertAxesAreInnerMostDims("all",c,o);let[d,p]=C.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=ge({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"all",n),y;if(i){let g=C.expandShapeToKeepDim(d,l);y=ge({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=ge({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var yL={kernelName:Ah,backendName:"webgl",kernelFunc:AL};function gL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=C.getAxesPermutation(c,o),h=a;u!=null&&(h=mn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=C.getInnerMostAxes(c.length,o)),C.assertAxesAreInnerMostDims("any",c,o);let[d,p]=C.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=ge({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"any",n),y;if(i){let g=C.expandShapeToKeepDim(d,l);y=ge({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=ge({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var xL={kernelName:yh,backendName:"webgl",kernelFunc:gL},wL=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:a,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,s];let i=t==="max"?">":"<",o=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${r};
|
|
|
|
int bestIndex = inOffset;
|
|
float bestValue = getA(batch, bestIndex);
|
|
|
|
for (int i = 0; i < ${r}; i++) {
|
|
int inIdx = ${o};
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate ${i} bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`}},_L=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,k.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let a=e[e.length-1],s=Math.ceil(a/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=ht(o),c=ln("coords",o),u,h;if(s===1){h=o+1;let N=ht(h);u=`
|
|
${N} sourceLocR = ${N}(${c.join()}, 0);
|
|
++${c[o-1]};
|
|
${N} sourceLocG = ${N}(${c.join()}, 0);
|
|
++${c[o-2]};
|
|
${N} sourceLocA = ${N}(${c.join()}, 0);
|
|
--${c[o-1]};
|
|
${N} sourceLocB = ${N}(${c.join()}, 0);
|
|
--${c[o-2]};`}else h=o,u=`
|
|
${l} sourceLocR = coords;
|
|
++${c[o-1]};
|
|
${l} sourceLocG = coords;
|
|
++${c[o-2]};
|
|
${l} sourceLocA = coords;
|
|
--${c[o-1]};
|
|
${l} sourceLocB = coords;
|
|
--${c[o-2]};`;let d=["x","y","z","w","u","v"].slice(0,h),p="."+d[h-1],f=d.map(N=>"int "+N),m=ln("sourceLocR",h-1).concat("inIdx.r"),A=ln("sourceLocG",h-1).concat("inIdx.g"),y=ln("sourceLocB",h-1).concat("inIdx.b"),g=ln("sourceLocA",h-1).concat("inIdx.a"),b=n==="max"?"greaterThan":"lessThan",x=r?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),
|
|
getBestIndicesAChannel(${A.join()}),
|
|
getBestIndicesAChannel(${y.join()}),
|
|
getBestIndicesAChannel(${g.join()})));`,w=`vec4(
|
|
getAChannel(${m.join()}),
|
|
hasNextCol ? getAChannel(${A.join()}) : 0.,
|
|
hasNextRow ? getAChannel(${y.join()}) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(${g.join()}) : 0.)`,_=r?"":`
|
|
float getBestIndicesAChannel(${f.join()}) {
|
|
return getChannel(getBestIndicesA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}`;this.userCode=`
|
|
float getAChannel(${f.join()}) {
|
|
return getChannel(getA(${d.join()}),
|
|
vec2(${d.slice(-2).join()}));
|
|
}
|
|
${_}
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
bool hasNextCol = ${c[o-1]} < ${i[o-1]-1};
|
|
bool hasNextRow = ${c[o-2]} < ${i[o-2]-1};
|
|
${u}
|
|
ivec4 srcIdx = ivec4(sourceLocR${p}, sourceLocG${p},
|
|
sourceLocB${p}, sourceLocA${p}) * ${t};
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = ${w};
|
|
|
|
for (int i = 0; i < ${t}; i++) {
|
|
inIdx = srcIdx;
|
|
${x}
|
|
vec4 candidate = ${w};
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(${b}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));
|
|
|
|
bestValue = vec4(replace.x ? candidate.x : bestValue.x,
|
|
replace.y ? candidate.y : bestValue.y,
|
|
replace.z ? candidate.z : bestValue.z,
|
|
replace.w ? candidate.w : bestValue.w);
|
|
bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));
|
|
srcIdx++;
|
|
}
|
|
setOutput(bestIndex);
|
|
}
|
|
`}};function m_(e,t,n,r=null){let a=t.shape[0],s=t.shape[1];r!=null&&(a=r.shape[0],s=r.shape[1]);let i=C.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:a,outSize:Math.ceil(s/i)},l=new wL(o,n,r==null),c=[t];r!=null&&c.push(r);let u=e.runWebGLProgram(l,c,"int32");if(u.shape[1]===1)return u;let h=m_(e,t,n,u);return e.disposeIntermediateTensorInfo(u),h}function A_(e,t,n,r=null){let a=r!=null?r.shape:t.shape,s=a[a.length-1],i=C.computeOptimalWindowSize(s),o=new _L(a,i,n,r==null),l=r==null?[t]:[t,r],c=e.runWebGLProgram(o,l,"int32");if(c.shape.length===t.shape.length){let u=A_(e,t,n,c);return e.disposeIntermediateTensorInfo(c),u}return c}function y_(e,t,n,r){let a=[n];if(C.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),a,t.shape.length),!Q().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],[i,o]=C.computeOutAndReduceShapes(t.shape,a),l=k.sizeFromShape(o),c=ge({inputs:{x:t},backend:e,attrs:{shape:[-1,l]}});s.push(c);let u=m_(e,c,r);s.push(u);let h=ge({inputs:{x:u},backend:e,attrs:{shape:i}});return s.forEach(d=>e.disposeIntermediateTensorInfo(d)),h}return A_(e,t,r)}function bL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=k.parseAxisParam(s,a.shape),o=C.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=mn({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let u=y_(n,l,i[0],"max");return c.forEach(h=>n.disposeIntermediateTensorInfo(h)),u}var vL={kernelName:Za,backendName:"webgl",kernelFunc:bL};function kL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=k.parseAxisParam(s,a.shape),o=C.getAxesPermutation(i,a.shape.length),l=a,c=[];o!=null&&(l=mn({inputs:{x:a},backend:n,attrs:{perm:o}}),c.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let u=y_(n,l,i[0],"min");return c.forEach(h=>n.disposeIntermediateTensorInfo(h)),u}var IL={kernelName:ru,backendName:"webgl",kernelFunc:kL},NL=mr+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,SL=Je({opSnippet:NL}),TL={kernelName:Vi,backendName:"webgl",kernelFunc:SL},EL=mr+"return log(x + sqrt(x * x + 1.0));",CL=Je({opSnippet:EL}),RL={kernelName:Ui,backendName:"webgl",kernelFunc:CL},FL=mr+`
|
|
return atan(x);
|
|
`,ML=Je({opSnippet:FL}),$L={kernelName:Hi,backendName:"webgl",kernelFunc:ML},DL=VP+`
|
|
return atan(a, b);
|
|
`,OL=`
|
|
vec4 result = atan(a, b);
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+UP+`
|
|
return result;
|
|
`,zL=Zt({opSnippet:DL,packedOpSnippet:OL}),PL={kernelName:Gi,backendName:"webgl",kernelFunc:zL},LL=mr+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,WL=Je({opSnippet:LL}),BL={kernelName:ji,backendName:"webgl",kernelFunc:WL},hc=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,c=e.dilationWidth,u=e.effectiveFilterHeight,h=e.effectiveFilterWidth,d=e.padInfo.top,p=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,A=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(f||(y="-1.0 / 1e-20"),n){let N=">=";this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
float avgValue = 0.0;
|
|
|
|
for (int wR = 0; wR < ${u};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${h};
|
|
wC += ${c}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xR, xC, d);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${N} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?a?m:A:`wR * ${h} + wC`};
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let g="max",b=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(b="avgValue / count");let x=Math.floor(s/4)*4,w=s%4,_=`
|
|
if (${f}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${g}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${d}, ${p});
|
|
const float initializationValue = ${y};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xR, int xC, int d) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xR, xC, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${y});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < ${u};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${x}; wC += 4) {
|
|
int xC = xCCorner + wC * ${c};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${c}, d),
|
|
getValue(batch, xR, xC + 2 * ${c}, d),
|
|
getValue(batch, xR, xC + 3 * ${c}, d)
|
|
);
|
|
|
|
${_}
|
|
}
|
|
|
|
int xC = xCCorner + ${x};
|
|
if (${w===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${_}
|
|
} else if (${w===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${c}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${_}
|
|
} else if (${w===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${c}, d),
|
|
getValue(batch, xR, xC + 2 * ${c}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${_}
|
|
}
|
|
}
|
|
setOutput(${b});
|
|
}
|
|
`}},$A=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,c=e.dilationDepth,u=e.dilationHeight,h=e.dilationWidth,d=e.effectiveFilterDepth,p=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,A=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let g=t==="avg",b="0.0";if(g||(b="-1.0 / 1e-20"),n){let E=">=";this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${y});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${c}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${u}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f};
|
|
wC += ${h}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xD, xR, xC, ch);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${E} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?a?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${p} * ${f} +
|
|
wR * ${f} + wC`};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let x="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let _=Math.floor(s/4)*4,N=s%4,T=`
|
|
if (${g}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${x}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${m}, ${A}, ${y});
|
|
const float initializationValue = ${b};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xD, int xR, int xC, int ch) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xD, xR, xC, ch);
|
|
}
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${b});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${c}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${u}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${_}; wC += 4) {
|
|
int xC = xCCorner + wC * ${h};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 3 * ${h}, ch)
|
|
);
|
|
|
|
${T}
|
|
}
|
|
|
|
int xC = xCCorner + ${_};
|
|
if (${N===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${N===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${N===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${h}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${h}, ch),
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
}
|
|
}
|
|
setOutput(${w});
|
|
}
|
|
}
|
|
`}};function VL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;fl(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(C.eitherStridesOrDilationsAreOne(i,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=C.computePool2DInfo(a.shape,s,i,c,o,l);if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))return En({inputs:{x:a},backend:n});let h=new hc(u,"avg",!1);return n.runWebGLProgram(h,[a],"float32")}var UL={kernelName:Ja,backendName:"webgl",kernelFunc:VL};function HL(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:c}=r,u=[1,1,1],h=C.computePool3DInfo(a.shape,s,i,u,o,l,c),d=new $A(h,"avg",!1);return n.runWebGLProgram(d,[a],"float32")}var jL={kernelName:au,backendName:"webgl",kernelFunc:HL},GL=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,c=o-1-e.padInfo.top,u=l-1-e.padInfo.left,h=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${c}, ${u});
|
|
const float avgMultiplier = float(${h});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${o};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${l};
|
|
wC+= ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},qL=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,c=e.dilationWidth,u=e.effectiveFilterDepth,h=e.effectiveFilterHeight,d=e.effectiveFilterWidth,p=u-1-e.padInfo.front,f=h-1-e.padInfo.top,m=d-1-e.padInfo.left,A=1/(t*n*r);this.userCode=`
|
|
const ivec3 pads = ivec3(${p}, ${f}, ${m});
|
|
const float avgMultiplier = float(${A});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${u};
|
|
wD += ${o}) {
|
|
float dyD = float(dyDCorner + wD) / ${a}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${l}) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${d};
|
|
wC += ${c}) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function XL(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:c,dimRoundingMode:u}=r,h=[1,1,1],d=C.computePool3DInfo(i.shape,o,l,h,c,u),p=new qL(d);return n.runWebGLProgram(p,[a],i.dtype)}var KL={kernelName:xh,backendName:"webgl",kernelFunc:XL};function ZL(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;fl([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:c}=r,u=C.computePool2DInfo(i.shape,o,l,1,c),h=new GL(u);return n.runWebGLProgram(h,[a],i.dtype)}var JL={kernelName:gh,backendName:"webgl",kernelFunc:ZL};function YL(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;return cp({a,b:s,transposeA:i,transposeB:o,backend:n})}var QL={kernelName:Ya,backendName:"webgl",kernelFunc:YL},eW=class{constructor(e,t,n,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,n);let i="0.0";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";a!=null&&(C.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = ${i};
|
|
float scale = ${o};
|
|
float inv = scale * inversesqrt(variance + float(${s}));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`}},tW=class{constructor(e,t,n,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";r!=null&&(C.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";a!=null&&(C.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 offset = ${i};
|
|
vec4 scale = ${o};
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(${s}));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`}},nW=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:a,variance:s,offset:i,scale:o}=e;k.assert(a.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||a.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(o==null||a.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let c=[r,a,s],u=null;i!=null&&(u=i.shape,c.push(i));let h=null;o!=null&&(h=o.shape,c.push(o));let d=Q().getBool("WEBGL_PACK_NORMALIZATION")?new tW(r.shape,a.shape,s.shape,u,h,l):new eW(r.shape,a.shape,s.shape,u,h,l);return t.runWebGLProgram(d,c,c[0].dtype)},rW={kernelName:cs,backendName:"webgl",kernelFunc:nW},sW=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ht(this.rank),n=`uniform int start[${this.rank}];`,r=aW(this.rank),a,s=e.map((i,o)=>`sourceLoc.${DA[o]} = start[${o}] + coords.${DA[o]};`);a=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${s.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
${n}
|
|
void main() {
|
|
${a}
|
|
setOutput(getSource(${r}));
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}},DA=["x","y","z","w","u","v"];function aW(e){if(e===1)return"sourceLoc";if(e<=6)return DA.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var iW=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length;let t=ht(this.rank),n=ln("coords",this.rank),r=ln("sourceLoc",this.rank),a=this.rank===1?"sourceLoc":`vec2(${r.slice(-2).join()})`,s=`getChannel(getSource(${r.join()}), ${a})`,i=`
|
|
result.x = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.y = ${s};
|
|
--${r[this.rank-1]};
|
|
}
|
|
`,o=this.rank===1?"":`
|
|
--${n[this.rank-1]};
|
|
if (++${n[this.rank-2]} < ${e[this.rank-2]}) {
|
|
++${r[this.rank-2]};
|
|
result.z = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${r[this.rank-1]};
|
|
result.w = ${s};
|
|
}
|
|
}
|
|
`,l=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((c,u)=>`start[${u}]`).join()});`:e.map((c,u)=>`${r[u]} = ${n[u]} + start[${u}];`).join(`
|
|
`);this.userCode=`
|
|
uniform int start[${this.rank}];
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${l}
|
|
vec4 result = vec4(0.);
|
|
${i}
|
|
${o}
|
|
setOutput(result);
|
|
}
|
|
`}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{this.startLoc==null&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),this.startLoc==null)||t.gl.uniform1iv(this.startLoc,e)}}};function oW(e,t,n,r){let a=r.texData.get(e.dataId),s=r.makeTensorInfo(n,e.dtype),i=r.texData.get(s.dataId);Object.assign(i,a),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=rn.computeFlatOffset(t,k.computeStrides(e.shape));a.slice&&(o+=a.slice.flatOffset),i.slice={flatOffset:o,origDataId:a.slice&&a.slice.origDataId||e.dataId};let l=r.dataRefCount.get(i.slice.origDataId)||1;return r.dataRefCount.set(i.slice.origDataId,l+1),s}function dc(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r,[o,l]=rn.parseSliceParams(a,s,i);if(rn.assertParamsValid(a,o,l),k.sizeFromShape(l)===0)return n.makeTensorInfo(l,a.dtype,[]);if(n.shouldExecuteOnCPU([a])||a.dtype==="string"){let h=n.texData.get(a.dataId),d=nP(h.values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,d)}let{isPacked:c}=n.texData.get(a.dataId),u=rn.isSliceContinous(a.shape,o,l);if(c||!u){let h=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new iW(l):new sW(l),d=h.getCustomSetupFunc(o);return n.runWebGLProgram(h,[a],a.dtype,d)}return n.uploadToGPU(a.dataId),oW(a,o,l,n)}var lW={kernelName:To,backendName:"webgl",kernelFunc:dc},uW=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;k.assert(a.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((g,b)=>g*b),l=C.getReshaped(a.shape,s,o),c=C.getPermuted(l.length,s.length),u=C.getReshapedPermuted(a.shape,s,o),h=C.getSliceBeginCoords(i,s.length),d=C.getSliceSize(u,i,s.length),p=[],f=ge({inputs:{x:a},backend:n,attrs:{shape:l}}),m=mn({inputs:{x:f},backend:n,attrs:{perm:c}}),A=ge({inputs:{x:m},backend:n,attrs:{shape:u}}),y=dc({inputs:{x:A},backend:n,attrs:{begin:h,size:d}});return p.push(f),p.push(m),p.push(A),p.forEach(g=>n.disposeIntermediateTensorInfo(g)),y},cW={kernelName:su,backendName:"webgl",kernelFunc:uW};function hW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.readSync(a.dataId),l=n.readSync(s.dataId),c=Gw(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,c)}var dW={kernelName:wh,backendName:"webgl",kernelFunc:hW},pW="return float(a != b);",g_=Zt({opSnippet:pW,dtype:"bool"}),fW={kernelName:Ao,backendName:"webgl",kernelFunc:g_};function pc(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return En({inputs:{x:a.complexTensorInfos.real},backend:n})}var mW={kernelName:Bh,backendName:"webgl",kernelFunc:pc},AW="return float(int(x));";function yW(e,t){let n=new Ra(e.shape,AW),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function OA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if(s==="complex64"){if(a.dtype==="complex64")return En({inputs:{x:a},backend:n});let i=Ct(a.shape),o=OA({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),l=Fa({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(a.dtype==="complex64"){let i=pc({inputs:{input:a},backend:n}),o=OA({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(a.dtype,s)){let i=En({inputs:{x:a},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32")return yW(a,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",k.getTypedArrayFromDType("bool",1)),o=g_({inputs:{a,b:i},backend:n});return n.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}var gW={kernelName:Qa,backendName:"webgl",kernelFunc:OA},x_="return ceil(x);",xW=Je({opSnippet:x_,packedOpSnippet:x_,cpuKernelImpl:Pz}),wW={kernelName:es,backendName:"webgl",kernelFunc:xW},_W=class{constructor(e){this.variableNames=["A"],this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
float value = getAAtOutCoords();
|
|
if (isnan(value)) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, minVal, maxVal));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}},bW=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`
|
|
uniform float minVal;
|
|
uniform float maxVal;
|
|
|
|
void main() {
|
|
vec4 value = getAAtOutCoords();
|
|
|
|
if (any(isnan(value))) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, vec4(minVal), vec4(maxVal)));
|
|
}
|
|
`}getCustomSetupFunc(e,t){return(n,r)=>{this.minLoc==null&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}};function vW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o;Q().getBool("WEBGL_PACK_CLIP")?o=new bW(a.shape):o=new _W(a.shape);let l=o.getCustomSetupFunc(s,i);return n.runWebGLProgram(o,[a],a.dtype,l)}var kW={kernelName:ma,backendName:"webgl",kernelFunc:vW},IW=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float re = abs(getRealAtOutCoords());
|
|
float im = abs(getImagAtOutCoords());
|
|
float mx = max(re, im);
|
|
|
|
// sadly the length function in glsl is not underflow-safe
|
|
// (at least not on Intel GPUs). So the safe solution is
|
|
// to ensure underflow-safety in all cases.
|
|
setOutput(
|
|
mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))
|
|
);
|
|
}
|
|
`}};function w_(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function NW(e){let{inputs:t,backend:n}=e,{x:r}=t,a=n.texData.get(r.dataId),s=new IW(r.shape),i=[w_(r,a.complexTensorInfos.real),w_(r,a.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var SW={kernelName:iu,backendName:"webgl",kernelFunc:NW},TW=class{constructor(e){this.outputShape=[],this.outputShape=C.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s<t.length;s++)t[s]=t[s-1]+e[s][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let s=1;s<t.length;s++){let i=t[s-1];n.push(`else if (yC < ${t[s]}) setOutput(getT${s}(yR, yC-${i}));`)}let r=t.length,a=t[t.length-1];n.push(`else setOutput(getT${r}(yR, yC-${a}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},EW=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=C.computeOutShape(e,t);let n=this.outputShape,r=n.length,a=ht(r),s=ln("coords",r),i=["x","y","z","w","u","v"].slice(0,r);this.variableNames=e.map((f,m)=>`T${m}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let f=1;f<o.length;f++)o[f]=o[f-1]+e[f][t];let l=i[t],c=i.slice(-2),u=i.join(),h=`if (${l} < ${o[0]}) {
|
|
return getChannel(
|
|
getT0(${u}), vec2(${c.join()}));
|
|
}`;for(let f=1;f<o.length;f++){let m=o[f-1];h+=`
|
|
if (${l} < ${o[f]} && ${l} >= ${o[f-1]}) {
|
|
return getChannel(
|
|
getT${f}(${dp(i,l,m)}),
|
|
vec2(${dp(c,l,m)}));
|
|
}`}let d=o.length,p=o[o.length-1];h+=`
|
|
return getChannel(
|
|
getT${d}(${dp(i,l,p)}),
|
|
vec2(${dp(c,l,p)}));`,this.userCode=`
|
|
float getValue(${i.map(f=>"int "+f)}) {
|
|
${h}
|
|
}
|
|
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(${s}), 0., 0., 0.);
|
|
|
|
${s[r-1]} = ${s[r-1]} + 1;
|
|
if (${s[r-1]} < ${n[r-1]}) {
|
|
result.g = getValue(${s});
|
|
}
|
|
|
|
${s[r-2]} = ${s[r-2]} + 1;
|
|
if (${s[r-2]} < ${n[r-2]}) {
|
|
result.a = getValue(${s});
|
|
}
|
|
|
|
${s[r-1]} = ${s[r-1]} - 1;
|
|
if (${s[r-2]} < ${n[r-2]} &&
|
|
${s[r-1]} < ${n[r-1]}) {
|
|
result.b = getValue(${s});
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function dp(e,t,n){let r=e.indexOf(t);return e.map((a,s)=>s===r?`${a} - ${n}`:a).join()}function pp(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.texData.get(r.dataId);return En({inputs:{x:a.complexTensorInfos.imag},backend:n})}var CW={kernelName:$h,backendName:"webgl",kernelFunc:pp};function bl(e,t,n){let r=e[0].dtype;if(r==="complex64"){let c=e.map(f=>pc({inputs:{input:f},backend:n})),u=e.map(f=>pp({inputs:{input:f},backend:n})),h=bl(c,t,n),d=bl(u,t,n),p=Fa({inputs:{real:h,imag:d},backend:n});return c.forEach(f=>n.disposeIntermediateTensorInfo(f)),u.forEach(f=>n.disposeIntermediateTensorInfo(f)),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),p}if(r==="string"){let{tensors2D:c,outShape:u}=__(e,t,n),h=c.map(A=>({vals:n.readSync(A.dataId),shape:A.shape})),d=c[0].shape[0]===1,p=Lz(h,u,r,d),f=C.computeOutShape(e.map(A=>A.shape),t),m=n.makeTensorInfo(f,r,p);return c.forEach(A=>n.disposeIntermediateTensorInfo(A)),m}if(e.length>Q().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let c=Math.floor(e.length/2),u=bl(e.slice(0,c),t,n),h=bl(e.slice(c),t,n),d=bl([u,h],t,n);return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),d}if(Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let c=new EW(e.map(u=>u.shape),t);return n.runWebGLProgram(c,e,r)}let{tensors2D:a,outShape:s}=__(e,t,n),i=new TW(a.map(c=>c.shape)),o=n.runWebGLProgram(i,a,r);a.forEach(c=>n.disposeIntermediateTensorInfo(c));let l=ge({inputs:{x:o},attrs:{shape:s},backend:n});return n.disposeIntermediateTensorInfo(o),l}function __(e,t,n){let r=C.computeOutShape(e.map(a=>a.shape),t);return{tensors2D:e.map(a=>ge({inputs:{x:a},attrs:{shape:[-1,k.sizeFromShape(a.shape.slice(t))]},backend:n})),outShape:r}}function b_(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=k.parseAxisParam(a,t[0].shape)[0],i=C.computeOutShape(t.map(c=>c.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(c=>k.sizeFromShape(c.shape)>0);if(o.length===1)return En({inputs:{x:o[0]},backend:n});let l=o.map(c=>c.shape);return C.assertParamsConsistent(l,s),bl(o,s,n)}var RW={kernelName:qi,backendName:"webgl",kernelFunc:b_},v_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,c=e.dilationHeight,u=e.dilationWidth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",A=m?1:2,y=m?2:3,g=m?3:1,b="",x="";n&&(r?b=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?b=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:b=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,x="result = activation(result);");let w=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${b}
|
|
|
|
const ivec2 strides = ivec2(${o}, ${l});
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${g}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${A}], coords[${y}]) * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${c};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d}; wC++) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${p}; d1 += 4) {
|
|
vec4 wValues = vec4(
|
|
getW(wR, wC, d1, d2),
|
|
getW(wR, wC, d1 + 1, d2),
|
|
getW(wR, wC, d1 + 2, d2),
|
|
getW(wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xR, xC, d1),
|
|
getX(batch, xR, xC, d1 + 1),
|
|
getX(batch, xR, xC, d1 + 2),
|
|
getX(batch, xR, xC, d1 + 3)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec4 xValues = vec4(
|
|
getX(batch, d1, xR, xC),
|
|
getX(batch, d1 + 1, xR, xC),
|
|
getX(batch, d1 + 2, xR, xC),
|
|
getX(batch, d1 + 3, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
|
|
if (${f===1}) {
|
|
|
|
if (${m}) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, ${p}) *
|
|
getW(wR, wC, ${p}, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, ${p}, xR, xC) *
|
|
getW(wR, wC, ${p}, d2);
|
|
}
|
|
|
|
} else if (${f===2}) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (${f===3}) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, ${p}, d2),
|
|
getW(wR, wC, ${p} + 1, d2),
|
|
getW(wR, wC, ${p} + 2, d2)
|
|
);
|
|
|
|
if (${m}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, ${p}),
|
|
getX(batch, xR, xC, ${p} + 1),
|
|
getX(batch, xR, xC, ${p} + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, ${p}, xR, xC),
|
|
getX(batch, ${p} + 1, xR, xC),
|
|
getX(batch, ${p} + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${w}
|
|
${x}
|
|
setOutput(result);
|
|
}
|
|
`}},FW=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,c=e.dilationWidth,u=e.filterDepth,h=e.filterHeight,d=e.filterWidth,p=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(${a}, ${s}, ${i});
|
|
const ivec3 pads = ivec3(${t}, ${n}, ${r});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d2 = coords.u;
|
|
|
|
ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xFCorner = xFRCCorner.x;
|
|
int xRCorner = xFRCCorner.y;
|
|
int xCCorner = xFRCCorner.z;
|
|
|
|
// Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get
|
|
// y(yF, yR, yC, d2). ? = to be determined. : = across all
|
|
// values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${u}; wF++) {
|
|
int xF = xFCorner + wF * ${o};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h}; wR++) {
|
|
int xR = xRCorner + wR * ${l};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d}; wC++) {
|
|
int xC = xCCorner + wC * ${c};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${p}; d1 += 4) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xF, xR, xC, d1),
|
|
getX(batch, xF, xR, xC, d1 + 1),
|
|
getX(batch, xF, xR, xC, d1 + 2),
|
|
getX(batch, xF, xR, xC, d1 + 3)
|
|
);
|
|
vec4 wValues = vec4(
|
|
getW(wF, wR, wC, d1, d2),
|
|
getW(wF, wR, wC, d1 + 1, d2),
|
|
getW(wF, wR, wC, d1 + 2, d2),
|
|
getW(wF, wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
if (${f===1}) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, ${p}) *
|
|
getW(wF, wR, wC, ${p}, d2);
|
|
} else if (${f===2}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1)
|
|
);
|
|
vec2 wValues = vec2(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else if (${f===3}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xF, xR, xC, ${p}),
|
|
getX(batch, xF, xR, xC, ${p} + 1),
|
|
getX(batch, xF, xR, xC, ${p} + 2)
|
|
);
|
|
vec3 wValues = vec3(
|
|
getW(wF, wR, wC, ${p}, d2),
|
|
getW(wF, wR, wC, ${p} + 1, d2),
|
|
getW(wF, wR, wC, ${p} + 2, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},MW=class{constructor(e,t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let{filterWidth:r,inChannels:a,strideWidth:s,strideHeight:i,padInfo:o,outWidth:l,dilationWidth:c,dilationHeight:u,dataFormat:h}=n,{left:d,top:p}=o,f=a*r,m=on(),A=h==="channelsLast",y=A?0:1,g=A?1:2,b="";for(let x=0;x<=1;x++)for(let w=0;w<=1;w++)b+=`
|
|
blockIndex = rc.y + ${w};
|
|
pos = rc.x + ${x};
|
|
|
|
if(blockIndex < ${e[1]} && pos < ${e[0]}) {
|
|
offsetY = int(blockIndex / (${l})) * ${i} - ${p};
|
|
d0 = offsetY + ${u} * (pos / ${f});
|
|
|
|
if(d0 < ${t[y]} && d0 >= 0) {
|
|
|
|
offsetX = int(mod(float(blockIndex), ${l}.) * ${s}. - ${d}.);
|
|
d1 = offsetX + ${c} * (int(mod(float(pos), ${f}.) / ${a}.));
|
|
|
|
if(d1 < ${t[g]} && d1 >= 0) {
|
|
|
|
ch = int(mod(float(pos), ${a}.));
|
|
|
|
if (${A}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${x*2+w}] = getChannel(
|
|
getA(d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${x*2+w}] = getChannel(
|
|
getA(ch, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;this.userCode=`
|
|
void main() {
|
|
ivec2 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0);
|
|
|
|
int blockIndex, pos, offsetY, d0, offsetX, d1, ch;
|
|
vec2 innerDims;
|
|
|
|
${b}
|
|
|
|
${m.output} = result;
|
|
}
|
|
`}};function k_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,c=r.texData.get(e.dataId),u=n.inChannels,h=l[0]*l[1]*l[2],d=n.outChannels,p=n.dataFormat==="channelsLast",f=!1,m=!1,A,y=[],g=(h===1||d===1)&&u>d_,b=l[2]%2!=0&&!!c.isPacked;if(g||!Q().getBool("WEBGL_LAZILY_UNPACK")||!Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!b){let x=p?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],w=ge({inputs:{x:e},backend:r,attrs:{shape:[1,x,n.inChannels]}}),_=ge({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),N=cp({a:w,b:_,transposeA:f,transposeB:m,backend:r,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i});A=ge({inputs:{x:N},backend:r,attrs:{shape:n.outShape}}),y.push(w),y.push(_),y.push(N)}else{let x=p?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),w={dataId:e.dataId,shape:[1,x,n.inChannels],dtype:e.dtype},_=c.shape;c.shape=c.shape.slice(),c.shape[c.shape.length-2]++,k.assert(sc(c.shape,w.shape),()=>`packed reshape ${c.shape} to ${w.shape} isn't free`);let N=ge({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});y.push(N);let T=cp({a:w,b:N,backend:r,transposeA:f,transposeB:m,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),E=r.texData.get(T.dataId);k.assert(E.isPacked,()=>"batchMatMul result is expected to be packed"),c.shape=_,E.shape=n.outShape,A=En({inputs:{x:T},backend:r}),A.shape=n.outShape,y.push(T)}for(let x of y)r.disposeIntermediateTensorInfo(x);return A}function I_({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:c,inChannels:u,outWidth:h,outHeight:d,dataFormat:p}=n,f=p==="channelsLast",m=l*c*u,A=d*h,y=[m,A],g=!0,b=!1,x=[],w=ge({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),_=ge({inputs:{x:t},backend:r,attrs:{shape:[1,m,k.sizeFromShape(t.shape)/m]}});x.push(w),x.push(_);let N=new MW(y,w.shape,n),T=r.runWebGLProgram(N,[w],"float32"),E=ge({inputs:{x:T},backend:r,attrs:{shape:[1,y[0],y[1]]}});x.push(T),x.push(E);let M=a!=null,z=s!=null,P=o==="leakyrelu",B=o?lp(o,!0):null,G=new i_(E.shape,_.shape,[1,A,n.outChannels],g,b,M,B,z,P),V=[E,_];if(a&&V.push(a),z&&V.push(s),P){let J=r.makeTensorInfo([],"float32",k.createScalarValue(i,"float32"));V.push(J),x.push(J)}let K=r.runWebGLProgram(G,V,"float32"),X=f?[1,d,h,n.outChannels]:[1,n.outChannels,d,h],ee=ge({inputs:{x:K},backend:r,attrs:{shape:X}});x.push(K);for(let J of x)r.disposeIntermediateTensorInfo(J);return ee}function $W(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:c,dimRoundingMode:u}=r,h=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(a.shape,s.shape,i,c,o,u,!1,h),p;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))p=k_({x:a,filter:s,convInfo:d,backend:n});else if(Q().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)p=I_({x:a,filter:s,convInfo:d,backend:n});else{let m=new v_(d);p=n.runWebGLProgram(m,[a,s],"float32")}let f=ge({inputs:{x:p},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(p),f}var DW={kernelName:ts,backendName:"webgl",kernelFunc:$W},OW=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int d2 = coords.w;
|
|
|
|
// Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${r};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${a};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
if (${s}) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},zW=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,c=s?2:3,u=s?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[${u}];
|
|
|
|
ivec2 dyCorner = ivec2(coords[${l}], coords[${c}]) - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
// Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
|
|
if (${s}) {
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
} else {
|
|
float xValue = getDy(batch, d2, idyR, idyC);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},PW=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=`
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int wF = coords.x;
|
|
int wR = coords.y;
|
|
int wC = coords.z;
|
|
int d1 = coords.w;
|
|
int d2 = coords.u;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yF = 0; yF < ${e.outDepth}; yF++) {
|
|
int xF = wF + yF * ${t} - ${a};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${n} - ${s};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${r} - ${i};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yF, yR, yC, d2);
|
|
float xValue = getX(b, xF, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},LW=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,c=r-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${o}, ${l}, ${c});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.u;
|
|
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyFCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${t}; wF++) {
|
|
float dyF = float(dyFCorner + wF) / ${a}.0;
|
|
|
|
if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyF = int(dyF);
|
|
|
|
int wFPerm = ${t} - 1 - wF;
|
|
|
|
for (int wR = 0; wR < ${n}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${n} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${r}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${r} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
float xValue = getDy(batch, idyF, idyR, idyC, d2);
|
|
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function WW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,filterShape:u}=r,h=C.convertConv2DDataFormat(l),d=C.computeConv2DInfo(a.shape,u,i,1,o,c,!1,h),p=new OW(d);return n.runWebGLProgram(p,[a,s],"float32")}var BW={kernelName:bh,backendName:"webgl",kernelFunc:WW};function VW(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:c,dimRoundingMode:u}=r,h=C.convertConv2DDataFormat(c),d=C.computeConv2DInfo(i,s.shape,o,1,l,u,!1,h),p=new zW(d);return n.runWebGLProgram(p,[a,s],"float32")}var UW={kernelName:ns,backendName:"webgl",kernelFunc:VW};function HW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,c=C.computeConv3DInfo(a.shape,s.shape,i,l,o),u=new FW(c);return n.runWebGLProgram(u,[a,s],"float32")}var jW={kernelName:ou,backendName:"webgl",kernelFunc:HW};function GW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r,c=C.computeConv3DInfo(a.shape,l,i,1,o),u=new PW(c);return n.runWebGLProgram(u,[a,s],"float32")}var qW={kernelName:vh,backendName:"webgl",kernelFunc:GW};function XW(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r,c=C.computeConv3DInfo(l,s.shape,o,1,i),u=new LW(c);return n.runWebGLProgram(u,[a,s],"float32")}var KW={kernelName:kh,backendName:"webgl",kernelFunc:XW},ZW=s_+`
|
|
return cos(x);
|
|
`,JW=Je({opSnippet:ZW}),YW={kernelName:rs,backendName:"webgl",kernelFunc:JW},QW=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,eB=Je({opSnippet:QW}),tB={kernelName:Xi,backendName:"webgl",kernelFunc:eB},nB=class{constructor(e,t,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[c]=t,[u,h]=n;this.outputShape=[c,u,h,l];let d=r==="bilinear"?1:0,[p,f]=[`${i-1}.0`,`${o-1}.0`],[m,A,y]=u>1?[`${(i-1)/(u-1)}`,"(y2-y1) * height_ratio",`y1*${p} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${p}`],[g,b,x]=h>1?[`${(o-1)/(h-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=`
|
|
const float height_ratio = float(${m});
|
|
const float width_ratio = float(${g});
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int y = coords[1];
|
|
int x = coords[2];
|
|
int d = coords[3];
|
|
|
|
// get box vals
|
|
float y1 = getBoxes(b,0);
|
|
float x1 = getBoxes(b,1);
|
|
float y2 = getBoxes(b,2);
|
|
float x2 = getBoxes(b,3);
|
|
|
|
// get image in batch index
|
|
int bInd = round(getBoxInd(b));
|
|
if(bInd < 0 || bInd >= ${s}) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = ${A};
|
|
float width_scale = ${b};
|
|
|
|
float in_y = ${y};
|
|
if( in_y < 0.0 || in_y > ${p} ) {
|
|
setOutput(float(${a}));
|
|
return;
|
|
}
|
|
float in_x = ${x};
|
|
if( in_x < 0.0 || in_x > ${f} ) {
|
|
setOutput(float(${a}));
|
|
return;
|
|
}
|
|
|
|
vec2 sourceFracIndexCR = vec2(in_x,in_y);
|
|
if(${d} == 1) {
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);
|
|
ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));
|
|
|
|
float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);
|
|
float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);
|
|
float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);
|
|
float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);
|
|
|
|
vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracCR.x;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;
|
|
float newValue = top + (bottom - top) * fracCR.y;
|
|
setOutput(newValue);
|
|
} else {
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestCR = ivec2(floor(
|
|
sourceFracIndexCR + vec2(0.5,0.5)));
|
|
float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);
|
|
setOutput(newValue);
|
|
}
|
|
}
|
|
`}},rB=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:c}=r,u=new nB(a.shape,s.shape,o,l,c);return n.runWebGLProgram(u,[a,s,i],"float32")},aB={kernelName:Ki,backendName:"webgl",kernelFunc:rB},T_=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=e;let r=e.length,a=t?"0.0":`getX(${N_(r,"coords")})`,s=e[e.length-1],i="",o="";t?(i=n?`end != ${s-1}`:"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`
|
|
uniform float index;
|
|
void main() {
|
|
${ht(r)} coords = getOutputCoords();
|
|
int end = ${S_(r,"coords")};
|
|
float val = ${a};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${i}) {
|
|
int idx = ${o};
|
|
${S_(r,"coords")} = idx;
|
|
val += getX(${N_(r,"coords")});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.index==null&&(this.index=t.getUniformLocation(n,"index")),t.gl.uniform1f(this.index,e)}}};function N_(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function S_(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function sB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length,c=C.getAxesPermutation([s],l),u=a;c!=null&&(u=mn({inputs:{x:a},backend:n,attrs:{perm:c}}));let h=C.getInnerMostAxes(1,l)[0];if(h!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${a.shape.length-1} but got axis=${s}`);let d=u.shape[h],p=En({inputs:{x:u},backend:n});for(let f=0;f<=Math.ceil(Math.log2(d))-1;f++){let m=new T_(u.shape,!1,o),A=m.getCustomSetupFunc(f),y=p;p=n.runWebGLProgram(m,[p],p.dtype,A),n.disposeIntermediateTensorInfo(y)}if(i){let f=new T_(u.shape,i,o),m=p;p=n.runWebGLProgram(f,[p],p.dtype),n.disposeIntermediateTensorInfo(m)}if(c!=null){let f=C.getUndoAxesPermutation(c),m=mn({inputs:{x:p},backend:n,attrs:{perm:f}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(u),m}return p}var iB={kernelName:as,backendName:"webgl",kernelFunc:sB};function oB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(a.shape.length===1){let l=n.readSync(a.dataId),c=n.readSync(s.dataId),u=Gw(l,c,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}else if(a.shape.length===2){let l=n.bufferSync(a),c=n.bufferSync(s),u=zz(l,c,i,o);return n.makeTensorInfo(u.shape,s.dtype,u.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}var lB={kernelName:Ih,backendName:"webgl",kernelFunc:oB},uB=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int h = ${this.getHeightCoordString()};
|
|
int w = ${this.getWidthCoordString()};
|
|
int d = ${this.getDepthCoordString()};
|
|
|
|
int in_h = h / ${t};
|
|
int offset_h = imod(h, ${t});
|
|
int in_w = w / ${t};
|
|
int offset_w = imod(w, ${t});
|
|
int offset_d = (offset_h * ${t} + offset_w) *
|
|
${this.getOutputDepthSize()};
|
|
int in_d = d + offset_d;
|
|
|
|
float result = ${this.getInputSamplingString()};
|
|
setOutput(result);
|
|
}
|
|
`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function cB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],c=i==="NHWC"?a.shape[2]:a.shape[3],u=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=c*s,p=u/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=new uB(f,s,i);return n.runWebGLProgram(m,[a],a.dtype)}var hB={kernelName:Zi,backendName:"webgl",kernelFunc:cB},E_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,c=e.strideHeight,u=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=e.outChannels/e.inChannels,A="",y="";n&&(r?A=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?A=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:A=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,y="result = activation(result);");let g=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${A}
|
|
|
|
const ivec2 strides = ivec2(${c}, ${u});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${m};
|
|
int q = d2 - d1 * ${m};
|
|
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
// TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.
|
|
for (int wR = 0; wR < ${p}; wR++) {
|
|
int xR = xRCorner + wR * ${h};
|
|
|
|
if (xR < 0 || xR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${f}; wC++) {
|
|
int xC = xCCorner + wC * ${d};
|
|
|
|
if (xC < 0 || xC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float xVal = getX(batch, xR, xC, d1);
|
|
float wVal = getW(wR, wC, d1, q);
|
|
dotProd += xVal * wVal;
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${g}
|
|
${y}
|
|
setOutput(result);
|
|
}
|
|
`}},C_=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.outShape;let s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,c=e.strideHeight,u=e.strideWidth,h=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,f=e.filterWidth,m=f,A="int xR; int xC; int xCOffset;";for(let x=0;x<p;x++)for(let w=0;w<f;w++)A+=`
|
|
vec4 xTexelR${x}C${w*2} = vec4(0.);
|
|
vec4 wR${x}C${w} = vec4(0.);
|
|
vec4 xR${x}C${w} = vec4(0.);`;for(let x=0;x<p;x++)for(let w=0;w<m;w++){let _=w*2;if(A+=`
|
|
xR = xRCorner + ${x*h};
|
|
xC = xCCorner + ${_*d};
|
|
`,u===1){if(_<f&&(l%2==1?A+=`
|
|
xCOffset = xC + 1;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
xTexelR${x}C${_}.zw = vec2(0.);
|
|
}
|
|
} else {
|
|
xTexelR${x}C${_} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + 1 - 2;
|
|
if(xR >= 0 && xR < ${s} && xCOffset >= 0 && xCOffset < ${i}) {
|
|
vec4 previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if(xCOffset + 1 >= ${i}) {
|
|
previous.zw = vec2(0.);
|
|
}
|
|
|
|
xR${x}C${_} = vec4(previous.zw, xTexelR${x}C${_}.xy);
|
|
} else {
|
|
xR${x}C${_} = vec4(0, 0, xTexelR${x}C${_}.xy);
|
|
}
|
|
`:A+=`
|
|
if(xR >= 0 && xR < ${s} && xC >= 0 && xC < ${i}) {
|
|
xTexelR${x}C${_} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${x}C${_} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${_} = xTexelR${x}C${_};
|
|
`,_+1<f)){let N=l%2==0?k.nearestLargerEven(d):d;d%2==0&&l%2==1||d%2!=0&&l%2!=1?(A+=`
|
|
xCOffset = xC + ${l%2} + ${N};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
`,d>1&&(A+=`
|
|
xCOffset -= 2;
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${_} = vec4(0.);
|
|
}
|
|
`),A+=`
|
|
xR${x}C${_+1} = vec4(
|
|
xTexelR${x}C${_}.zw, xTexelR${x}C${_+2}.xy);
|
|
`):A+=`
|
|
xCOffset = xC + ${N};
|
|
|
|
if(xR >= 0 && xR < ${s} &&
|
|
xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_+2} = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
|
|
xR${x}C${_+1} = xTexelR${x}C${_+2};
|
|
`}}else _<f&&(A+=`
|
|
if(xR >= 0 && xR < ${s}) {
|
|
`,l%2==1?(A+=`
|
|
xCOffset = xC + 1 - ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${_} = vec4(0.);
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < ${i}) {
|
|
xTexelR${x}C${_+2} = getX(batch, xR, xC + 1, d1);
|
|
} else {
|
|
xTexelR${x}C${_+2} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${_} = vec4(
|
|
xTexelR${x}C${_}.zw, xTexelR${x}C${_+2}.zw);
|
|
`,_+1<f&&(A+=`
|
|
vec4 final = vec4(0.);
|
|
xCOffset = xC + 1 + ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xR${x}C${_+1} = vec4(xTexelR${x}C${_+2}.xy, final.xy);
|
|
`)):(A+=`
|
|
if(xC >= 0 && xC < ${i}) {
|
|
xTexelR${x}C${_} = getX(batch, xR, xC, d1);
|
|
} else {
|
|
xTexelR${x}C${_} = vec4(0.);
|
|
}
|
|
|
|
xCOffset = xC + ${u};
|
|
if(xCOffset >= 0 && xCOffset < ${i}) {
|
|
xTexelR${x}C${_+2} = getX(batch, xR, xCOffset, d1);
|
|
} else {
|
|
xTexelR${x}C${_+2} = vec4(0.);
|
|
}
|
|
|
|
xR${x}C${_} = vec4(
|
|
xTexelR${x}C${_}.xy, xTexelR${x}C${_+2}.xy);
|
|
`,_+1<f&&(A+=`
|
|
xR${x}C${_+1} = vec4(
|
|
xTexelR${x}C${_}.zw, xTexelR${x}C${_+2}.zw);
|
|
`)),A+="}");_<f&&(A+=`
|
|
vec4 wTexelR${x}C${_} = getW(${x}, ${_}, d1, q);
|
|
wR${x}C${_} = vec4(wTexelR${x}C${_}.xz, wTexelR${x}C${_}.xz);
|
|
`,_+1<f&&(A+=`
|
|
vec4 wTexelR${x}C${_+1} = getW(${x}, ${_+1}, d1, q);
|
|
wR${x}C${_+1} =
|
|
vec4(wTexelR${x}C${_+1}.xz, wTexelR${x}C${_+1}.xz);`))}for(let x=0;x<p;x++)for(let w=0;w<f;w++)A+=`dotProd += xR${x}C${w} * wR${x}C${w};`;let y="",g="";n&&(r?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:a?y=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:y=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,g="result = activation(result);");let b=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${y}
|
|
|
|
const ivec2 strides = ivec2(${c}, ${u});
|
|
const ivec2 pads = ivec2(${o}, ${l});
|
|
|
|
void main() {
|
|
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2;
|
|
int q = 0;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
vec4 dotProd = vec4(0.);
|
|
|
|
${A}
|
|
|
|
vec4 result = dotProd;
|
|
${b}
|
|
${g}
|
|
setOutput(result);
|
|
}
|
|
`}};function dB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:c}=r,u=l;u==null&&(u=[1,1]),k.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let h=C.computeConv2DInfo(a.shape,s.shape,i,u,o,c,!0),d;return Q().getBool("WEBGL_PACK_DEPTHWISECONV")&&h.strideWidth<=2&&h.outChannels/h.inChannels==1?d=new C_(h):d=new E_(h),n.runWebGLProgram(d,[a,s],"float32")}var pB={kernelName:ss,backendName:"webgl",kernelFunc:dB},fB=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int dm = coords.w;
|
|
int d2 = d1 * ${s} + dm;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
// TO DO: Vec4 over the batch size
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${r};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${a};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},mB=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[3];
|
|
ivec2 dyCorner = coords.yz - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${r}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
// TO DO: Vec4 over the channelMul
|
|
for (int dm = 0; dm < ${o}; dm++) {
|
|
int d2 = d1 * ${o} + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function AB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,filterShape:u}=r,h=C.computeConv2DInfo(a.shape,u,i,o,l,c,!0),d=new fB(h);return n.runWebGLProgram(d,[a,s],"float32")}var yB={kernelName:Nh,backendName:"webgl",kernelFunc:AB};function gB(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:c,inputShape:u}=r,h=C.computeConv2DInfo(u,s.shape,i,o,l,c,!0),d=new mB(h);return n.runWebGLProgram(d,[a,s],"float32")}var xB={kernelName:Sh,backendName:"webgl",kernelFunc:gB},wB=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;
|
|
setOutput(val);
|
|
}
|
|
`}};function _B(e){let{inputs:t,backend:n}=e,{x:r}=t,a=[...r.shape,...r.shape],s=k.sizeFromShape(r.shape),i=ge({inputs:{x:r},backend:n,attrs:{shape:[s]}}),o=new wB(s),l=n.runWebGLProgram(o,[i],i.dtype),c=ge({inputs:{x:l},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),c}var bB={kernelName:Th,backendName:"webgl",kernelFunc:_B},vB=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:a,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:c}=e,{top:u,left:h}=r;this.userCode=`
|
|
const ivec2 strides = ivec2(${a}, ${s});
|
|
const ivec2 pads = ivec2(${u}, ${h});
|
|
const float neg_infinity = -3.4e38;
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.w;
|
|
ivec2 outTopLeftCorner =
|
|
coords.yz * strides - pads;
|
|
int hBeg = outTopLeftCorner.x;
|
|
int wBeg = outTopLeftCorner.y;
|
|
|
|
float curVal = neg_infinity;
|
|
for (int h = 0; h < ${i}; h++) {
|
|
int hIn = hBeg + h * ${l};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${o}; w++) {
|
|
int wIn = wBeg + w * ${c};
|
|
|
|
if (wIn >= 0 && wIn < ${n}) {
|
|
float xVal = getX(batch, hIn, wIn, d1);
|
|
float wVal = getW(h, w, d1);
|
|
|
|
float val = xVal + wVal;
|
|
if (val > curVal) {
|
|
curVal = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = curVal;
|
|
setOutput(result);
|
|
}
|
|
`}};function kB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,c=C.computeDilation2DInfo(a.shape,s.shape,i,o,"NHWC",l),u,h=new vB(c);u=n.runWebGLProgram(h,[a,s],"float32");let d=ge({inputs:{x:u},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(u),d}var IB={kernelName:lu,backendName:"webgl",kernelFunc:kB},NB="return (x >= 0.0) ? x : (exp(x) - 1.0);",SB=`
|
|
vec4 result;
|
|
|
|
result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);
|
|
result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);
|
|
result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);
|
|
result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);
|
|
|
|
return result;
|
|
`,TB=Je({opSnippet:NB,packedOpSnippet:SB}),EB={kernelName:Ji,backendName:"webgl",kernelFunc:TB},CB="return (b >= 1.0) ? a : a * (b + 1.0);",RB=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,FB=e=>{let{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=Q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new cc(RB,r.shape,a.shape):new _l(CB,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)},MB={kernelName:Rh,backendName:"webgl",kernelFunc:FB},$B=`
|
|
return vec4(equal(a, b));
|
|
`,DB="return float(a == b);",OB=Zt({opSnippet:DB,packedOpSnippet:$B,dtype:"bool"}),zB={kernelName:Qi,backendName:"webgl",kernelFunc:OB},PB=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${C.ERF_P};
|
|
float a1 = ${C.ERF_A1};
|
|
float a2 = ${C.ERF_A2};
|
|
float a3 = ${C.ERF_A3};
|
|
float a4 = ${C.ERF_A4};
|
|
float a5 = ${C.ERF_A5};
|
|
|
|
float sign = sign(x);
|
|
x = abs(x);
|
|
float t = 1.0 / (1.0 + p * x);
|
|
return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));
|
|
`,LB=Je({opSnippet:PB}),WB={kernelName:Yi,backendName:"webgl",kernelFunc:LB},R_="return exp(x);",F_=Je({opSnippet:R_,packedOpSnippet:R_,cpuKernelImpl:Wz}),BB={kernelName:os,backendName:"webgl",kernelFunc:F_};function zA(e){let{inputs:t,attrs:n,backend:r}=e,{dim:a}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=a;return a<0&&(k.assert(-(i+1)<=a,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+a+1),o.splice(l,0,1),ge({inputs:{x:s},backend:r,attrs:{shape:o}})}var VB={kernelName:eo,backendName:"webgl",kernelFunc:zA},M_="return exp(x) - 1.0;",UB=Je({opSnippet:M_,packedOpSnippet:M_,cpuKernelImpl:Bz}),HB={kernelName:to,backendName:"webgl",kernelFunc:UB},$_=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let a=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${r}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=`
|
|
const float exponentMultiplier = ${a};
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
${i}
|
|
}
|
|
|
|
float mulMatDFT(int batch, int index) {
|
|
float indexRatio = float(index) / float(${r});
|
|
float exponentMultiplierTimesIndexRatio =
|
|
exponentMultiplier * indexRatio;
|
|
|
|
float result = 0.0;
|
|
|
|
for (int i = 0; i < ${r}; i++) {
|
|
// x = (-2|2 * PI / N) * index * i;
|
|
float x = exponentMultiplierTimesIndexRatio * float(i);
|
|
float expR = cos(x);
|
|
float expI = sin(x);
|
|
float real = getReal(batch, i);
|
|
float imag = getImag(batch, i);
|
|
|
|
result +=
|
|
unaryOpComplex(real, expR, imag, expI) / ${s};
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`}};function D_(e,t,n){let r=n.texData.get(e.dataId),a=k.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=a/s,o=ge({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}),l=o.shape,c=new $_("real",l,t),u=new $_("imag",l,t),h=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:l},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:l}],d=n.runWebGLProgram(c,h,"float32"),p=n.runWebGLProgram(u,h,"float32"),f=Fa({inputs:{real:d,imag:p},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p);let m=ge({inputs:{x:f},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(f),m}function jB(e){let{inputs:t,backend:n}=e,{input:r}=t;return D_(r,!1,n)}var GB={kernelName:Fh,backendName:"webgl",kernelFunc:jB},qB=class{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode=`
|
|
uniform float value;
|
|
void main() {
|
|
// Input can be obtained from uniform value.
|
|
setOutput(value);
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.valueLoc==null&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}};function PA(e){let{backend:t,attrs:n}=e,{shape:r,value:a}=n,{dtype:s}=n;if(s=s||k.inferDtype(a),s==="string"){let i=k.getArrayFromDType(s,k.sizeFromShape(r));return i.fill(a),t.makeTensorInfo(r,s,i)}else{let i=new qB(r,a),o=i.getCustomSetupFunc(a);return t.runWebGLProgram(i,[],s,o)}}var XB={kernelName:uu,backendName:"webgl",kernelFunc:PA},KB=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
|
|
int coordX = ${t} - x;
|
|
float outputValue;
|
|
if(coordX >= 0 && coordX < ${t}) {
|
|
outputValue = getImage(coords[0], coords[1], coordX, coords[3]);
|
|
} else {
|
|
outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},ZB={kernelName:no,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,a=new KB(n.shape);return r.runWebGLProgram(a,[n],n.dtype)}},O_="return floor(x);",JB=Je({opSnippet:O_,packedOpSnippet:O_,cpuKernelImpl:Vz}),YB={kernelName:ls,backendName:"webgl",kernelFunc:JB},QB=`
|
|
float s = sign(a) * sign(b);
|
|
int ia = round(a);
|
|
int ib = round(b);
|
|
if (ib != 0) {
|
|
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
|
|
return float(idiv(ia, ib, s));
|
|
} else {
|
|
return NAN;
|
|
}
|
|
`,eV=`
|
|
ivec4 ia = round(a);
|
|
ivec4 ib = round(b);
|
|
bvec4 cond = notEqual(ib, ivec4(0));
|
|
ivec4 result = ivec4(0);
|
|
vec4 s = sign(a) * sign(b);
|
|
|
|
// Windows (D3D) wants guaranteed non-zero int division at compile-time.
|
|
if (cond[0]) {
|
|
result[0] = idiv(ia[0], ib[0], s[0]);
|
|
}
|
|
if (cond[1]) {
|
|
result[1] = idiv(ia[1], ib[1], s[1]);
|
|
}
|
|
if (cond[2]) {
|
|
result[2] = idiv(ia[2], ib[2], s[2]);
|
|
}
|
|
if (cond[3]) {
|
|
result[3] = idiv(ia[3], ib[3], s[3]);
|
|
}
|
|
return vec4(result);
|
|
`,tV=Zt({opSnippet:QB,packedOpSnippet:eV,dtype:"int32"}),nV={kernelName:us,backendName:"webgl",kernelFunc:tV},rV=class{constructor(e){this.variableNames=["A"];let t=on(),[n,r]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0);
|
|
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
setOutput(floor(value * 255.0 + 0.5));
|
|
}
|
|
`}},aV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=on(),[n,r]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for(int row=0; row<=1; row++) {
|
|
for(int col=0; col<=1; col++) {
|
|
texC = coords[1] + row;
|
|
depth = coords[2] + col;
|
|
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${r}.0, ${n}.0);
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
result[row * 2 + col] = floor(value * 255.0 + 0.5);
|
|
}
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},iV={kernelName:Gh,backendName:"webgl",kernelFunc:sV},vl;function sV(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:a}=t,{numChannels:s}=r,i=typeof HTMLVideoElement!="undefined"&&a instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&a instanceof HTMLImageElement,l=typeof ImageBitmap!="undefined"&&a instanceof ImageBitmap,[c,u]=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],h=[u,c],d=[u,c,s];(o||i||l)&&(vl==null&&(vl=document.createElement("canvas").getContext("2d")),vl.canvas.width=c,vl.canvas.height=u,vl.drawImage(a,0,0,c,u),a=vl.canvas);let p=n.makeTensorInfo(h,"int32");n.texData.get(p.dataId).usage=Vn.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(p.dataId),a);let f=Q().getBool("WEBGL_PACK")?new aV(d):new rV(d),m=n.runWebGLProgram(f,[p],"int32");return n.disposeData(p.dataId),m}function oV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dataFormat:u,dilations:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=r,m=C.convertConv2DDataFormat(u),A=C.computeConv2DInfo(a.shape,s.shape,l,h,c,d,!1,m),y,g=[];if(A.filterHeight===1&&A.filterWidth===1&&A.dilationHeight===1&&A.dilationWidth===1&&A.strideHeight===1&&A.strideWidth===1&&(A.padInfo.type==="SAME"||A.padInfo.type==="VALID"))y=k_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else if(Q().getBool("WEBGL_CONV_IM2COL")&&a.shape[0]===1)y=I_({x:a,filter:s,convInfo:A,backend:n,bias:i,activation:p,preluActivationWeights:o,leakyreluAlpha:f});else{let x=i!=null,w=o!=null,_=p==="leakyrelu",N=p?lp(p,!1):null,T=new v_(A,x,N,w,_),E=[a,s];if(i&&E.push(i),o&&E.push(o),_){let M=n.makeTensorInfo([],"float32",k.createScalarValue(f,"float32"));E.push(M),g.push(M)}y=n.runWebGLProgram(T,E,"float32")}let b=ge({inputs:{x:y},backend:n,attrs:{shape:A.outShape}});return g.push(y),g.forEach(x=>n.disposeIntermediateTensorInfo(x)),b}var lV={kernelName:Vs,backendName:"webgl",kernelFunc:oV};function uV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dimRoundingMode:h,activation:d,leakyreluAlpha:p}=r,f=[],m=u;m==null&&(m=[1,1]),k.assert(C.eitherStridesOrDilationsAreOne(l,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`);let A=C.computeConv2DInfo(a.shape,s.shape,l,m,c,h,!0),y=Q().getBool("WEBGL_PACK_DEPTHWISECONV")&&A.strideWidth<=2&&A.outChannels/A.inChannels==1,g=d?lp(d,y):null,b=[a,s],x=i!=null,w=o!=null,_=d==="leakyrelu";if(x&&b.push(i),w&&b.push(o),_){let E=n.makeTensorInfo([],"float32",k.createScalarValue(p,"float32"));b.push(E),f.push(E)}let N;y?N=new C_(A,x,g,w,_):N=new E_(A,x,g,w,_);let T=n.runWebGLProgram(N,b,"float32");return f.forEach(E=>n.disposeIntermediateTensorInfo(E)),T}var cV={kernelName:Us,backendName:"webgl",kernelFunc:uV},hV=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let r=ht(t.length),a=ht(n.length),s=this.sliceDim>1?"strides[j]":"strides";this.userCode=`
|
|
${r} strides = ${r}(${this.strides});
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
for (int j = 0; j < ${this.sliceDim}; j++) {
|
|
int index = round(getIndices(coords[0], j));
|
|
flattenIndex += index * ${s};
|
|
}
|
|
setOutput(getX(flattenIndex, coords[1]));
|
|
}
|
|
`}};function dV(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=a.shape,i=s[s.length-1],[o,l,c,u]=C.prepareAndValidate(r,a),h=ge({inputs:{x:a},backend:n,attrs:{shape:[l,i]}}),d=ge({inputs:{x:r},backend:n,attrs:{shape:[k.sizeFromShape(r.shape)/c,c]}}),p=new hV(i,u,[l,c]),f=n.runWebGLProgram(p,[d,h],d.dtype),m=ge({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(f),m}var pV={kernelName:ao,backendName:"webgl",kernelFunc:dV},mV=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=ht(this.rank),r=fV(e,2);this.userCode=`
|
|
void main() {
|
|
${n} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function fV(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let a=0;a<e.length;a++)a===2?r.push("int(getIndices(resRC.x, resRC.z))"):r.push(`${n[a]}`);return r.join()}function AV(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r,l=k.parseAxisParam(i,a.shape)[0],c=C.segment_util.collectGatherOpShapeInfo(a,s,l,o),u=k.sizeFromShape(s.shape),h=[],d=ge({inputs:{x:a},backend:n,attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]}}),p=ge({inputs:{x:s},backend:n,attrs:{shape:[c.batchSize,u/c.batchSize]}});h.push(d),h.push(p);let f=[c.batchSize,c.outerSize,u/c.batchSize,c.sliceSize];if(n.shouldExecuteOnCPU([a,s])||a.dtype==="string"){let g=n.bufferSync(p),b=n.bufferSync(d),x=Uz(b,g,f);return h.forEach(w=>n.disposeIntermediateTensorInfo(w)),n.makeTensorInfo(c.outputShape,x.dtype,x.values)}let m=new mV(d.shape,f),A=n.runWebGLProgram(m,[d,p],d.dtype);h.push(A);let y=ge({inputs:{x:A},backend:n,attrs:{shape:c.outputShape}});return h.forEach(g=>n.disposeIntermediateTensorInfo(g)),y}var yV={kernelName:ro,backendName:"webgl",kernelFunc:AV},gV="return float(a > b);",xV=`
|
|
return vec4(greaterThan(a, b));
|
|
`,wV=Zt({opSnippet:gV,packedOpSnippet:xV,cpuKernelImpl:Hz,dtype:"bool"}),_V={kernelName:so,backendName:"webgl",kernelFunc:wV},bV="return float(a >= b);",vV=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,kV=Zt({opSnippet:bV,packedOpSnippet:vV,dtype:"bool"}),IV={kernelName:hs,backendName:"webgl",kernelFunc:kV};function NV(e){let{inputs:t,backend:n}=e,{input:r}=t;return D_(r,!0,n)}var SV={kernelName:Mh,backendName:"webgl",kernelFunc:NV},TV="return float(!isnan(x) && !isinf(x));",EV=Je({opSnippet:TV,dtype:"bool"}),CV={kernelName:io,backendName:"webgl",kernelFunc:EV},RV="return float(isinf(x));",FV=Je({opSnippet:RV,dtype:"bool"}),MV={kernelName:oo,backendName:"webgl",kernelFunc:FV},$V="return float(isnan(x));",DV=Je({opSnippet:$V,dtype:"bool"}),OV={kernelName:lo,backendName:"webgl",kernelFunc:DV},zV="return float(a < b);",PV=`
|
|
return vec4(lessThan(a, b));
|
|
`,LV=Zt({opSnippet:zV,packedOpSnippet:PV,cpuKernelImpl:jz,dtype:"bool"}),WV={kernelName:uo,backendName:"webgl",kernelFunc:LV},BV="return float(a <= b);",VV=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,UV=Zt({opSnippet:BV,packedOpSnippet:VV,dtype:"bool"}),HV={kernelName:co,backendName:"webgl",kernelFunc:UV};function jV(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=Gz(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}var GV={kernelName:Dh,backendName:"webgl",kernelFunc:jV},qV=`if (x < 0.0) return NAN;
|
|
return log(x);`,XV=`
|
|
vec4 result = log(x);
|
|
vec4 isNaN = vec4(lessThan(x, vec4(0.0)));
|
|
result.r = isNaN.r == 1.0 ? NAN : result.r;
|
|
result.g = isNaN.g == 1.0 ? NAN : result.g;
|
|
result.b = isNaN.b == 1.0 ? NAN : result.b;
|
|
result.a = isNaN.a == 1.0 ? NAN : result.a;
|
|
|
|
return result;
|
|
`,KV=Je({opSnippet:qV,packedOpSnippet:XV,cpuKernelImpl:qz}),ZV={kernelName:fs,backendName:"webgl",kernelFunc:KV},JV="return log(1.0 + x);",YV=Je({opSnippet:JV}),QV={kernelName:ho,backendName:"webgl",kernelFunc:YV},eU="return float(a >= 1.0 && b >= 1.0);",tU=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,nU=Zt({opSnippet:eU,packedOpSnippet:tU,dtype:"bool"}),rU={kernelName:po,backendName:"webgl",kernelFunc:nU},aU="return float(!(x >= 1.0));",sU=Je({opSnippet:aU}),iU={kernelName:cu,backendName:"webgl",kernelFunc:sU},oU="return float(a >= 1.0 || b >= 1.0);",lU=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,uU=Zt({opSnippet:oU,packedOpSnippet:lU,dtype:"bool"}),cU={kernelName:hu,backendName:"webgl",kernelFunc:uU},hU=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
int d = coords[3];
|
|
float x = getX(b, r, c, d);
|
|
float sum = 0.0;
|
|
for (int j = -${s}; j <= ${s}; j++) {
|
|
int idx = d + j;
|
|
if (idx >= 0 && idx <= ${i}) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * ${o};
|
|
setOutput(val);
|
|
}
|
|
`}},dU=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;a===.5?o=`inversesqrt(${l})`:a===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${a}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords.x;
|
|
int r = coords.y;
|
|
int c = coords.z;
|
|
int d = coords.w;
|
|
|
|
bool hasNextCol = d < ${this.outputShape[3]};
|
|
bool hasNextRow = c < ${this.outputShape[2]};
|
|
|
|
vec4 sum = vec4(0.);
|
|
vec4 xFragAtOutputCoords = getX(b, r, c, d);
|
|
|
|
vec4 xAtOutputCoords = vec4(
|
|
getChannel(xFragAtOutputCoords, vec2(c, d)),
|
|
hasNextCol ?
|
|
getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,
|
|
hasNextRow ?
|
|
getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0
|
|
);
|
|
|
|
int firstChannel = d - ${s};
|
|
vec2 cache = vec2(0.);
|
|
if(firstChannel >= 0){
|
|
vec4 firstChannelFrag = getX(b, r, c, firstChannel);
|
|
cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));
|
|
if(hasNextRow){
|
|
cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));
|
|
}
|
|
}
|
|
|
|
ivec2 depth = ivec2(d, d + 1);
|
|
for (int j = - ${s}; j <= ${s}; j++) {
|
|
ivec2 idx = depth + j;
|
|
bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));
|
|
bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));
|
|
|
|
bool depthInRange = aboveLowerBound.x && belowUpperBound.x;
|
|
bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;
|
|
|
|
if(depthInRange || depthPlusOneInRange){
|
|
vec4 z = vec4(0.);
|
|
vec4 xFragAtCurrentDepth;
|
|
z.xz = cache.xy;
|
|
if(depthPlusOneInRange && hasNextCol){
|
|
xFragAtCurrentDepth = idx.y != d ?
|
|
getX(b, r, c, idx.y) : xFragAtOutputCoords;
|
|
z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));
|
|
if(hasNextRow){
|
|
z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));
|
|
}
|
|
}
|
|
cache.xy = z.yw;
|
|
sum += z * z;
|
|
}
|
|
}
|
|
vec4 result = xAtOutputCoords * ${o};
|
|
setOutput(result);
|
|
}
|
|
`}},pU=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r,c=Q().getBool("WEBGL_PACK_NORMALIZATION")?new dU(a.shape,s,i,o,l):new hU(a.shape,s,i,o,l);return n.runWebGLProgram(c,[a],a.dtype)},fU={kernelName:du,backendName:"webgl",kernelFunc:pU},mU=class{constructor(e,t,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=a,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float result = 0.0;
|
|
for (int d = 0; d < ${this.depth}; ++d) {
|
|
int depthBegin = int(max(0.0, float(d - ${t})));
|
|
int depthEnd = int(min(float(${this.depth}),
|
|
float(d + ${t} + 1)));
|
|
|
|
const int MIN_DEPTH_BEGIN = 0;
|
|
const int MAX_DEPTH_END = ${this.depth};
|
|
|
|
float norm = 0.0;
|
|
for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd) {
|
|
norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
norm = float(${r}) * norm + float(${n});
|
|
|
|
for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd){
|
|
float dyi = -2.0 * float(${r})
|
|
* float(${a})
|
|
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * ${a});
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}},AU=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:c,beta:u}=r,h=new mU(a.shape,o,l,c,u);return n.runWebGLProgram(h,[a,s,i],a.dtype)},yU={kernelName:Oh,backendName:"webgl",kernelFunc:AU};function gU(e,t,n,r){let a=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/a,i=ge({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=hi(i,e.dtype,"max",r),l=ge({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}function z_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=C.getAxesPermutation(c,o),h=u!=null,d=n.shouldExecuteOnCPU([a]),p=a;if(h){if(d){let g=n.texData.get(p.dataId).values,b=new Array(o);for(let _=0;_<b.length;_++)b[_]=a.shape[u[_]];let x=RA(g,a.shape,a.dtype,u,b);p=n.makeTensorInfo(b,a.dtype);let w=n.texData.get(p.dataId);w.values=x}else p=up(a,u,n);c=C.getInnerMostAxes(c.length,o)}C.assertAxesAreInnerMostDims("max",c,o);let[f,m]=C.computeOutAndReduceShapes(p.shape,c),A=f;i&&(A=C.expandShapeToKeepDim(f,l));let y;if(d){let g=n.texData.get(p.dataId).values,b=Xz(g,k.sizeFromShape(m),A,a.dtype);y=n.makeTensorInfo(A,a.dtype);let x=n.texData.get(y.dataId);x.values=b}else y=gU(p,m,A,n);return h&&n.disposeIntermediateTensorInfo(p),y}var xU={kernelName:ms,backendName:"webgl",kernelFunc:z_},wU=e_+`
|
|
return max(a, b);
|
|
`,_U=`
|
|
vec4 result = vec4(max(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+op+`
|
|
return result;
|
|
`,bU=Zt({opSnippet:wU,packedOpSnippet:_U,cpuKernelImpl:Kz}),vU={kernelName:As,backendName:"webgl",kernelFunc:bU};function kU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;fl(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r,c=1;k.assert(C.eitherStridesOrDilationsAreOne(i,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let u=C.computePool2DInfo(a.shape,s,i,c,o,l);if(u.filterWidth===1&&u.filterHeight===1&&k.arraysEqual(u.inShape,u.outShape))return En({inputs:{x:a},backend:n});let h=new hc(u,"max",!1);return n.runWebGLProgram(h,[a],a.dtype)}var IU={kernelName:ys,backendName:"webgl",kernelFunc:kU};function NU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:c}=r,u=[1,1,1],h=C.computePool3DInfo(a.shape,s,i,u,o,c,l),d=new $A(h,"max",!1);return n.runWebGLProgram(d,[a],a.dtype)}var SU={kernelName:pu,backendName:"webgl",kernelFunc:NU},TU=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,a=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=a-1-e.padInfo.top,o=s-1-e.padInfo.left,l=a*s-1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${a};
|
|
wR += ${r}) {
|
|
float dyR = float(dyRCorner + wR) / ${t}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${s}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${n}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue = wR * ${s} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},EU=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,c=e.effectiveFilterWidth,u=o-1-e.padInfo.front,h=l-1-e.padInfo.top,d=c-1-e.padInfo.left,p=o*l*c-1;this.userCode=`
|
|
const ivec3 pads = ivec3(${u}, ${h}, ${d});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${o};
|
|
wD += ${a}) {
|
|
float dyD = float(dyDCorner + wD) / ${t}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${l};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${n}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${c};
|
|
wC += ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
int maxPosValue = ${p} -
|
|
int(getMaxPos(batch, idyD, idyR, idyC, ch));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue =
|
|
wD * ${l} * ${c} +
|
|
wR * ${c} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function CU(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:c,dimRoundingMode:u}=r,h=[1,1,1],d=C.computePool3DInfo(i.shape,o,l,h,c,u),p=new $A(d,"max",!0),f=n.runWebGLProgram(p,[i],i.dtype),m=new EU(d),A=n.runWebGLProgram(m,[a,f],i.dtype);return n.disposeIntermediateTensorInfo(f),A}var RU={kernelName:Ph,backendName:"webgl",kernelFunc:CU};function FU(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;fl([s,i],"maxPoolGrad");let{filterSize:l,strides:c,pad:u,dimRoundingMode:h}=r,d=C.computePool2DInfo(o.shape,l,c,1,u,h),p=!0,f=new hc(d,"max",p),m=n.runWebGLProgram(f,[o],o.dtype),A=new TU(d),y=n.runWebGLProgram(A,[a,m],o.dtype);return n.disposeIntermediateTensorInfo(m),y}var MU={kernelName:zh,backendName:"webgl",kernelFunc:FU};function $U(e,t,n,r){let a=new hc(n,"max",!1),s=r.runWebGLProgram(a,[e],"float32");a=new hc(n,"max",!0,!0,t);let i=r.runWebGLProgram(a,[e],"float32");return[s,i]}var DU={kernelName:Lh,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;k.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let c=[1,1];k.assert(C.eitherStridesOrDilationsAreOne(s,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${c}'`);let u=C.computePool2DInfo(r.shape,a,s,c,i),[h,d]=$U(r,o,u,l);return[h,d]}};function OU(e,t,n,r){let a=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/a,i=ge({inputs:{x:e},attrs:{shape:[s,a]},backend:r}),o=hi(i,"float32","mean",r),l=ge({inputs:{x:o},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(o),l}var zU={kernelName:gs,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:a,axis:s}=t,i=n,o=r.shape.length,l=k.parseAxisParam(s,r.shape),c=l,u=C.getAxesPermutation(c,o),h=u!=null,d=i.shouldExecuteOnCPU([r]),p=[],f=r;if(h){if(d){let b=i.texData.get(f.dataId).values,x=new Array(o);for(let N=0;N<x.length;N++)x[N]=r.shape[u[N]];let w=RA(b,r.shape,r.dtype,u,x);f=i.makeTensorInfo(x,r.dtype);let _=i.texData.get(f.dataId);_.values=w}else f=up(r,u,i);p.push(f),c=C.getInnerMostAxes(c.length,o)}C.assertAxesAreInnerMostDims("sum",c,o);let[m,A]=C.computeOutAndReduceShapes(f.shape,c),y=m;a&&(y=C.expandShapeToKeepDim(m,l));let g=OU(f,A,y,i);for(let b of p)i.disposeIntermediateTensorInfo(b);return g}};function PU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=k.parseAxisParam(s,a.shape),c=l,u=C.getAxesPermutation(c,o),h=a;u!=null&&(h=mn({inputs:{x:a},backend:n,attrs:{perm:u}}),c=C.getInnerMostAxes(c.length,a.shape.length)),C.assertAxesAreInnerMostDims("min",c,o);let[d,p]=C.computeOutAndReduceShapes(h.shape,c),f=k.sizeFromShape(p),m=ge({inputs:{x:h},backend:n,attrs:{shape:[-1,f]}}),A=hi(m,m.dtype,"min",n),y;if(i){let g=C.expandShapeToKeepDim(d,l);y=ge({inputs:{x:A},backend:n,attrs:{shape:g}})}else y=ge({inputs:{x:A},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(A),u!=null&&n.disposeIntermediateTensorInfo(h),y}var LU={kernelName:xs,backendName:"webgl",kernelFunc:PU},WU=e_+`
|
|
return min(a, b);
|
|
`,BU=`
|
|
vec4 result = vec4(min(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+op+`
|
|
return result;
|
|
`,VU=Zt({opSnippet:WU,packedOpSnippet:BU,cpuKernelImpl:Zz}),UU={kernelName:ws,backendName:"webgl",kernelFunc:VU},HU=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((c,u)=>c[0]+e[u]+c[1]);let r=e.length,a=ht(r),s=t.map(c=>c[0]).join(","),i=t.map((c,u)=>c[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l=n==="reflect"?0:1;if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start) {
|
|
outC = start * 2 - outC - ${l};
|
|
} else if(outC >= end) {
|
|
outC = (end - 1) * 2 - outC + ${l};
|
|
}
|
|
setOutput(getX(outC - start));
|
|
}
|
|
`;return}this.userCode=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outC = getOutputCoords();
|
|
for (int i = 0; i < ${r}; i++) {
|
|
if (outC[i] < start[i]) {
|
|
outC[i] = start[i] * 2 - outC[i] - ${l};
|
|
} else if(outC[i] >= end[i]) {
|
|
outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};
|
|
}
|
|
}
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}},jU=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((p,f)=>p[0]+e[f]+p[1]);let r=e.length,a=ht(r),s=t.map(p=>p[0]).join(","),i=t.map((p,f)=>p[0]+e[f]).join(","),o=ln("rc",r),l=ln("source",r),c=`${o[r-1]} < ${this.outputShape[r-1]}`,u=r===1?"source":`vec2(${l.slice(-2).join()})`,h=n==="reflect"?0:1,d="";if(r===1){let p=`
|
|
${a} source = rc;
|
|
if (source < start) {
|
|
source = start * 2 - source - ${h};
|
|
} else if (source >= end) {
|
|
source = (end - 1) * 2 - source + ${h};
|
|
}
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
`}else{let p=`
|
|
${a} source = rc;
|
|
${a} lt = ${a}(lessThan(source, start));
|
|
${a} gte = ${a}(greaterThanEqual(source, end));
|
|
${a} orig = 1 - (lt + gte);
|
|
source = orig * source +
|
|
lt * (start * 2 - source - ${h}) +
|
|
gte * ((end - 1) * 2 - source + ${h});
|
|
source -= start;
|
|
`;d=`
|
|
${a} rc = outputLoc;
|
|
${p}
|
|
result[0] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[1] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {
|
|
${p}
|
|
result[2] = getChannel(getX(${l.join()}), ${u});
|
|
${o[r-1]} += 1;
|
|
if(${c}) {
|
|
${p}
|
|
result[3] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${d}
|
|
setOutput(result);
|
|
}
|
|
`}},GU=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:a,mode:s}=n,i=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new jU(r.shape,a,s):new HU(r.shape,a,s);return t.runWebGLProgram(i,[r],r.dtype)},qU={kernelName:fu,backendName:"webgl",kernelFunc:GU},XU=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,KU=`
|
|
vec4 result = mod(a, b);
|
|
vec4 isNaN = vec4(equal(b, vec4(0.0)));
|
|
`+op+`
|
|
return result;
|
|
`,ZU=Zt({opSnippet:XU,packedOpSnippet:KU}),JU={kernelName:fo,backendName:"webgl",kernelFunc:ZU},YU=class{constructor(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode=`
|
|
uniform float seed;
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
|
|
float r = random(seed);
|
|
float cdf = 0.0;
|
|
|
|
for (int i = 0; i < ${t-1}; i++) {
|
|
cdf += getProbs(batch, i);
|
|
|
|
if (r < cdf) {
|
|
setOutput(float(i));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// If no other event happened, last event happened.
|
|
setOutput(float(${t-1}));
|
|
}
|
|
`}getCustomSetupFunc(e){return(t,n)=>{this.seedLoc==null&&(this.seedLoc=t.getUniformLocation(n,"seed")),t.gl.uniform1f(this.seedLoc,e)}}},QU=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,eH=`
|
|
// vec4 one = vec4(equal(a, b));
|
|
// return one + (vec4(1.0) - one) * a / b;
|
|
vec4 result = a / b;
|
|
if(a.x == b.x) {
|
|
result.x = 1.;
|
|
}
|
|
if(a.y == b.y) {
|
|
result.y = 1.;
|
|
}
|
|
if(a.z == b.z) {
|
|
result.z = 1.;
|
|
}
|
|
if(a.w == b.w) {
|
|
result.w = 1.;
|
|
}
|
|
|
|
return result;
|
|
`,P_=Zt({opSnippet:QU,packedOpSnippet:eH,checkOutOfBounds:!0}),tH={kernelName:is,backendName:"webgl",kernelFunc:P_},L_="return a - b;",W_=Zt({opSnippet:L_,packedOpSnippet:L_,supportsComplex:!0,cpuKernelImpl:aP}),nH={kernelName:Ps,backendName:"webgl",kernelFunc:W_};function B_(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=k.parseAxisParam([s],a.shape),o=z_({inputs:{x:a},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=C.expandShapeToKeepDim(o.shape,i),c=ge({inputs:{x:o},backend:n,attrs:{shape:l}}),u=W_({inputs:{a,b:c},backend:n}),h=F_({inputs:{x:u},backend:n}),d=MA({inputs:{x:h},backend:n,attrs:{axis:i,keepDims:!1}}),p=ge({inputs:{x:d},backend:n,attrs:{shape:l}}),f=P_({inputs:{a:h,b:p},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),f}var rH={kernelName:Os,backendName:"webgl",kernelFunc:B_};function aH(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r,l=o?a:B_({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),c=l.shape[0],u=l.shape[1],h=new YU(c,u,s),d=h.getCustomSetupFunc(i),p=n.runWebGLProgram(h,[l],"int32",d);return o||n.disposeIntermediateTensorInfo(l),p}var sH={kernelName:Wh,backendName:"webgl",kernelFunc:aH},V_="return -x;";function iH(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let s=n.texData.get(r.dataId),[i,o]=Yz(s.values,r.shape,r.dtype);return n.makeTensorInfo(o,r.dtype,i)}let a;return Q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?a=new wl(r.shape,V_):a=new Ra(r.shape,V_),n.runWebGLProgram(a,[r],r.dtype)}var oH={kernelName:mo,backendName:"webgl",kernelFunc:iH},lH=Fr.nonMaxSuppressionV3Impl;function uH(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r,c=n.readSync(a.dataId),u=n.readSync(s.dataId),{selectedIndices:h}=lH(c,u,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}var cH={kernelName:yo,backendName:"webgl",kernelFunc:uH},hH=Fr.nonMaxSuppressionV4Impl;function dH(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:c}=r,u=n.readSync(a.dataId),h=n.readSync(s.dataId),{selectedIndices:d,validOutputs:p}=hH(u,h,i,o,l,c);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([p]))]}var pH={kernelName:go,backendName:"webgl",kernelFunc:dH},fH=Fr.nonMaxSuppressionV5Impl;function mH(e){C.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:c}=r,u=n.readSync(a.dataId),h=n.readSync(s.dataId),d=i,p=o,f=l,m=c,{selectedIndices:A,selectedScores:y}=fH(u,h,d,p,f,m);return[n.makeTensorInfo([A.length],"int32",new Int32Array(A)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var AH={kernelName:xo,backendName:"webgl",kernelFunc:mH},yH=class{constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int index = round(getIndices(coords.x));
|
|
setOutput(mix(float(${r}), float(${n}),
|
|
float(index == coords.y)));
|
|
}
|
|
`}},gH=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=k.sizeFromShape(a.shape),c=new yH(l,s,i,o),u=ge({inputs:{x:a},backend:n,attrs:{shape:[l]}}),h=n.runWebGLProgram(c,[u],a.dtype);n.disposeIntermediateTensorInfo(u);let d=[...a.shape,s],p=ge({inputs:{x:h},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(h),p},xH={kernelName:bs,backendName:"webgl",kernelFunc:gH};function fp(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let a=pc({inputs:{input:r},backend:n}),s=fp({inputs:{x:a},backend:n}),i=pp({inputs:{input:r},backend:n}),o=fp({inputs:{x:i},backend:n}),l=Fa({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return PA({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var wH={kernelName:zo,backendName:"webgl",kernelFunc:fp};function U_(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(r.dtype==="complex64"){let a=pc({inputs:{input:r},backend:n}),s=U_({inputs:{x:a},backend:n}),i=pp({inputs:{input:r},backend:n}),o=fp({inputs:{x:i},backend:n}),l=Fa({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return PA({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var _H={kernelName:wo,backendName:"webgl",kernelFunc:U_};function bH(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return zA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(u=>{k.assertShapesMatch(s,u.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===u.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(u=>{let h=zA({inputs:{input:u},backend:n,attrs:{dim:a}});return o.push(h),h}),c=b_({inputs:l,backend:n,attrs:{axis:a}});return o.forEach(u=>n.disposeIntermediateTensorInfo(u)),c}var vH={kernelName:_o,backendName:"webgl",kernelFunc:bH},kH=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((l,c)=>l[0]+e[c]+l[1]);let r=e.length,a=ht(r),s=t.map(l=>l[0]).join(","),i=t.map((l,c)=>l[0]+e[c]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(float(${n}));
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`;return}this.userCode=`
|
|
${a} start = ${a}(${s});
|
|
${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(float(${n}));
|
|
} else {
|
|
${a} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
}
|
|
`}},IH=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((f,m)=>f[0]+e[m]+f[1]);let r=e.length,a=ht(r),s=t.map(f=>f[0]).join(","),i=t.map((f,m)=>f[0]+e[m]).join(","),o=ln("rc",r),l=ln("source",r),c=`${o[r-1]} < ${this.outputShape[r-1]}`,u=r===1?"source":`vec2(${l.slice(-2).join()})`,h=[`${a} rc = outputLoc;`,`${o[r-1]} += 1;
|
|
if(${c}) {
|
|
`,r===1?"":`}
|
|
rc = outputLoc;
|
|
${o[r-2]} += 1;
|
|
if(${o[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${o[r-1]} += 1;
|
|
if(${c}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",p="";for(let f=0,m=r===1?2:4;f<m;f++)p+=`
|
|
${h[f]}
|
|
if (${d}) {
|
|
result[${f}] = float(${n});
|
|
} else {
|
|
${a} source = rc - start;
|
|
result[${f}] = getChannel(getX(${l.join()}), ${u});
|
|
}
|
|
`;p+=r===1?"} ":"}}",this.userCode=`
|
|
const ${a} start = ${a}(${s});
|
|
const ${a} end = ${a}(${i});
|
|
|
|
void main() {
|
|
${a} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${p}
|
|
setOutput(result);
|
|
}
|
|
`}},H_=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r,o=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new IH(a.shape,s,i):new kH(a.shape,s,i);return n.runWebGLProgram(o,[a],a.dtype)},NH={kernelName:vs,backendName:"webgl",kernelFunc:H_},SH=`
|
|
if(a < 0.0 && floor(b) < b){
|
|
return NAN;
|
|
}
|
|
if (b == 0.0) {
|
|
return 1.0;
|
|
}
|
|
return (round(mod(b, 2.0)) != 1) ?
|
|
pow(abs(a), b) : sign(a) * pow(abs(a), b);
|
|
`,TH=`
|
|
// isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.
|
|
vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));
|
|
vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);
|
|
vec4 result = multiplier * pow(abs(a), b);
|
|
|
|
// Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS
|
|
bvec4 isExpZero = equal(b, vec4(0.0));
|
|
result.r = isExpZero.r ? 1.0 : result.r;
|
|
result.g = isExpZero.g ? 1.0 : result.g;
|
|
result.b = isExpZero.b ? 1.0 : result.b;
|
|
result.a = isExpZero.a ? 1.0 : result.a;
|
|
|
|
vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));
|
|
`+op+`
|
|
return result;
|
|
`,EH=Zt({opSnippet:SH,packedOpSnippet:TH}),CH={kernelName:ks,backendName:"webgl",kernelFunc:EH};function RH(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=[],c=k.parseAxisParam(s,a.shape),u=c,h=C.getAxesPermutation(u,o),d=a;h!=null&&(d=mn({inputs:{x:a},backend:n,attrs:{perm:h}}),u=C.getInnerMostAxes(u.length,o),l.push(d)),C.assertAxesAreInnerMostDims("prod",u,o);let p;if(n.shouldExecuteOnCPU([d])){let f=n.texData.get(d.dataId).values,{outVals:m,outShape:A,outDtype:y}=Qz(d.shape,d.dtype,f,u);p=n.makeTensorInfo(A,y,m)}else{let[f,m]=C.computeOutAndReduceShapes(d.shape,u),A=k.sizeFromShape(m),y=ge({inputs:{x:d},backend:n,attrs:{shape:[-1,A]}}),g=Xh(a.dtype),b=hi(y,g,"prod",n);p=ge({inputs:{x:b},backend:n,attrs:{shape:f}}),l.push(y),l.push(b)}if(i){l.push(p);let f=C.expandShapeToKeepDim(p.shape,c);p=ge({inputs:{x:p},backend:n,attrs:{shape:f}})}return l.forEach(f=>n.disposeIntermediateTensorInfo(f)),p}var FH={kernelName:bo,backendName:"webgl",kernelFunc:RH},j_=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=eP(r,a,s,i);return t.makeTensorInfo([o.length],i,o)},MH={kernelName:mu,backendName:"webgl",kernelFunc:j_},$H="return 1.0 / x;",DH=Je({opSnippet:$H}),OH={kernelName:vo,backendName:"webgl",kernelFunc:DH},zH=mr+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,PH=`
|
|
vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,LH=Je({opSnippet:zH,packedOpSnippet:PH}),WH={kernelName:Ns,backendName:"webgl",kernelFunc:LH},BH=mr+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,VH=`
|
|
vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));
|
|
bvec4 isNaN = isnan(x);
|
|
|
|
result.r = isNaN.r ? x.r : result.r;
|
|
result.g = isNaN.g ? x.g : result.g;
|
|
result.b = isNaN.b ? x.b : result.b;
|
|
result.a = isNaN.a ? x.a : result.a;
|
|
|
|
return result;
|
|
`,UH=Je({opSnippet:BH,packedOpSnippet:VH}),HH={kernelName:Ts,backendName:"webgl",kernelFunc:UH},jH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":h="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${h};
|
|
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));
|
|
ivec2 sourceCeilRC = ivec2(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);
|
|
float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);
|
|
float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);
|
|
float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);
|
|
|
|
vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracRC.y;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;
|
|
float newValue = top + (bottom - top) * fracRC.x;
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}},GH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h;a?h="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":h="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]},
|
|
${c[1]/u[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${h};
|
|
|
|
// Compute the four integer indices.
|
|
ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));
|
|
ivec3 sourceCeilRC = ivec3(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-1};
|
|
|
|
// In parallel, construct four corners for all four components in
|
|
// packed 2x2 cell.
|
|
vec4 topLeft = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomLeft = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 topRight = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomRight = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);
|
|
|
|
vec4 top = mix(topLeft, topRight, fracRC.yyzz);
|
|
vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);
|
|
vec4 newValue = mix(top, bottom, fracRC.x);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function qH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,u=Q().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new GH(a.shape,l,c,s,i):new jH(a.shape,l,c,s,i);return n.runWebGLProgram(u,[a],"float32")}var XH={kernelName:Ss,backendName:"webgl",kernelFunc:qH},KH=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],c=o[0]/l[0],u=o[1]/l[1],h=1/c,d=1/u,p=Math.ceil(h)*2+2,f=Math.ceil(d)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${c});
|
|
const float widthScale = float(${u});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(startRLerp - float(winHeight / 2));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(startCLerp - float(winWidth / 2));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float dxR = float(dyR) * heightScale;
|
|
int topDxRIndex = int(floor(dxR));
|
|
int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0));
|
|
float dxRLerp = dxR - float(topDxRIndex);
|
|
float inverseDxRLerp = 1.0 - dxRLerp;
|
|
|
|
float dxC = float(dyC) * widthScale;
|
|
int leftDxCIndex = int(floor(dxC));
|
|
int rightDxCIndex = int(min(ceil(dxC), ${a-1}.0));
|
|
float dxCLerp = dxC - float(leftDxCIndex);
|
|
float inverseDxCLerp = 1.0 - dxCLerp;
|
|
|
|
if (r == topDxRIndex && c == leftDxCIndex) {
|
|
// topLeft
|
|
accumulator +=
|
|
getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == topDxRIndex && c == rightDxCIndex) {
|
|
// topRight
|
|
accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == leftDxCIndex) {
|
|
// bottomLeft
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == rightDxCIndex) {
|
|
// bottomRight
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function ZH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new KH(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var JH={kernelName:Uh,backendName:"webgl",kernelFunc:ZH},YH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let c=[r&&t>1?i-1:i,r&&n>1?o-1:o],u=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0",d;a?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${c[0]/u[0]},
|
|
${c[1]/u[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestRC = ivec2(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function QH(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,u=new YH(a.shape,l,c,s,i);return n.runWebGLProgram(u,[a],a.dtype)}var ej={kernelName:Au,backendName:"webgl",kernelFunc:QH},tj=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],c=o[0]/l[0],u=o[1]/l[1],h=1/c,d=1/u,p=Math.ceil(h)*2+2,f=Math.ceil(d)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${c});
|
|
const float widthScale = float(${u});
|
|
|
|
const float invHeightScale = float(${h});
|
|
const float invWidthScale = float(${d});
|
|
|
|
const int winHeight = int(${p});
|
|
const int winWidth = int(${f});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(floor(startRLerp - float(winHeight / 2)));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(floor(startCLerp - float(winWidth / 2)));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float sourceFracRow =
|
|
float(${o[0]}) *
|
|
(float(dyR) / float(${l[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${o[1]}) *
|
|
(float(dyC) / float(${l[1]}));
|
|
|
|
int sourceNearestRow = int(min(
|
|
float(int(${r}) - 1),
|
|
${n} ? float(round(sourceFracRow)) :
|
|
float(floor(sourceFracRow))));
|
|
|
|
int sourceNearestCol = int(min(
|
|
float(int(${a}) - 1),
|
|
${n} ? float(round(sourceFracCol)) :
|
|
float(floor(sourceFracCol))));
|
|
|
|
if (r == sourceNearestRow && c == sourceNearestCol) {
|
|
accumulator += getDy(b, dyR, dyC, d);
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function nj(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new tj(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var rj={kernelName:Vh,backendName:"webgl",kernelFunc:nj},aj=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=`
|
|
void main() {
|
|
int coord = getOutputCoords();
|
|
setOutput(getX(${e[0]} - coord - 1));
|
|
}
|
|
`;return}let r=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,a=e.map((i,o)=>r(o)).join(","),s=ht(n);this.userCode=`
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${a}));
|
|
}
|
|
`}},sj=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let r=ln("rc",n),a=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,i=ht(n);n===1?this.userCode=`
|
|
void main(){
|
|
int rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = getChannel(getX(${e[0]} - rc - 1),
|
|
${e[0]} - rc - 1);
|
|
if(${a}){
|
|
result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),
|
|
${e[0]} - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:this.userCode=`
|
|
void main() {
|
|
${i} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = ${o(r.slice())};
|
|
if(${a}){
|
|
result.g = ${l(r.slice())};
|
|
}
|
|
if(${s}) {
|
|
result.b = ${c(r.slice())};
|
|
if(${a}) {
|
|
result.a = ${u(r.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function o(p){return h(p)}function l(p){return p[n-1]="("+p[n-1]+" + 1)",h(p)}function c(p){return p[n-2]="("+p[n-2]+" + 1)",h(p)}function u(p){return p[n-1]="("+p[n-1]+" + 1)",p[n-2]="("+p[n-2]+" + 1)",h(p)}function h(p){let f=e.map((y,g)=>d(g,p)),m=f.join(","),A=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${A}))`}function d(p,f){return t.indexOf(p)!==-1&&e[p]!==1?`${e[p]} - ${f[p]} - 1`:`${f[p]}`}}};function ij(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=a.shape.length,o=k.parseAxisParam(s,a.shape);if(i===0)return En({inputs:{x:a},backend:n});let l=Q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new sj(a.shape,o):new aj(a.shape,o);return n.runWebGLProgram(l,[a],a.dtype)}var oj={kernelName:Es,backendName:"webgl",kernelFunc:ij},lj=class{constructor(e,t,n,r){this.variableNames=["Image"],this.outputShape=[];let a=e[1],s=e[2],i=Math.sin(t).toFixed(3),o=Math.cos(t).toFixed(3);this.outputShape=e;let[l,c]=C.getImageCenter(r,a,s),u=l.toFixed(3),h=c.toFixed(3),d="";typeof n=="number"?d=`float outputValue = ${n.toFixed(2)};`:d=`
|
|
vec3 fill = vec3(${n.join(",")});
|
|
float outputValue = fill[coords[3]];`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
float coordXFloat = (float(x) - ${u}) * ${o} - (float(y) - ${h}) * ${i};
|
|
float coordYFloat = (float(x) - ${u}) * ${i} + (float(y) - ${h}) * ${o};
|
|
int coordX = int(round(coordXFloat + ${u}));
|
|
int coordY = int(round(coordYFloat + ${h}));
|
|
${d}
|
|
if(coordX >= 0 && coordX < ${s} && coordY >= 0 && coordY < ${a}) {
|
|
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},uj={kernelName:Po,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=new lj(r.shape,a,s,i);return o.runWebGLProgram(l,[r],r.dtype)}},cj=`
|
|
// OpenGL ES does not support round function.
|
|
// The algorithm is based on banker's rounding.
|
|
float base = floor(x);
|
|
if ((x - base) < 0.5) {
|
|
return floor(x);
|
|
} else if ((x - base) > 0.5) {
|
|
return ceil(x);
|
|
} else {
|
|
if (mod(base, 2.0) == 0.0) {
|
|
return base;
|
|
} else {
|
|
return base + 1.0;
|
|
}
|
|
}
|
|
`,hj=Je({opSnippet:cj}),dj={kernelName:Cs,backendName:"webgl",kernelFunc:hj},pj="return inversesqrt(x);",fj=Je({opSnippet:pj,cpuKernelImpl:tP}),mj={kernelName:Rs,backendName:"webgl",kernelFunc:fj},G_=class{constructor(e,t,n,r,a,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=ht(a.length),l=ht(s.length),c="";n===1?c="i":n===2&&(c="i, j");let u=`getIndices(${c})`,h="";r===1?h="i":r===2&&(h="i, coords[1]");let d=`getUpdates(${h})`,p=t>1?"strides[j]":"strides";this.userCode=`
|
|
${o} strides = ${o}(${a});
|
|
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
float sum = 0.0;
|
|
bool found = false;
|
|
for (int i = 0; i < ${e}; i++) {
|
|
int flattenedIndex = 0;
|
|
for (int j = 0; j < ${t}; j++) {
|
|
int index = round(${u});
|
|
flattenedIndex += index * ${p};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${d};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function Aj(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:c,strides:u,outputSize:h}=C.calculateShapes(s,a,i),d=[h/c,c];if(h===0)return n.makeTensorInfo(i,a.dtype);let p=ge({inputs:{x:a},backend:n,attrs:{shape:[l,o]}}),f=ge({inputs:{x:s},backend:n,attrs:{shape:[l,c]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),A=new G_(l,o,p.shape.length,f.shape.length,u,d),y=n.runWebGLProgram(A,[f,p,m],f.dtype),g=ge({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(m),g}var yj={kernelName:Io,backendName:"webgl",kernelFunc:Aj},gj=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let r,a;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)a="resRC",r="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let c=0;c<t.length;c++)l.push(`${i[c]}`),c<e&&o.push(`${i[c]}`);r=o.join(),a=l.join()}let s=ht(n);this.userCode=`
|
|
void main() {
|
|
${s} resRC = getOutputCoords();
|
|
float cVal = getC(${r});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${a}));
|
|
} else {
|
|
setOutput(getB(${a}));
|
|
}
|
|
}
|
|
`}};function xj(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=new gj(r.shape.length,a.shape,a.shape.length);return n.runWebGLProgram(i,[r,a,s],Jn(a.dtype,s.dtype))}var wj={kernelName:No,backendName:"webgl",kernelFunc:xj},_j=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${C.SELU_SCALEALPHA};
|
|
float scale = ${C.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,bj=Je({opSnippet:_j}),vj={kernelName:So,backendName:"webgl",kernelFunc:bj},kj="return 1.0 / (1.0 + exp(-1.0 * x));",Ij=Je({opSnippet:kj}),Nj={kernelName:Ms,backendName:"webgl",kernelFunc:Ij},Sj=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,Tj=Je({opSnippet:Sj}),Ej={kernelName:Co,backendName:"webgl",kernelFunc:Tj},Cj=s_+`
|
|
return sin(x);
|
|
`,Rj=Je({opSnippet:Cj}),Fj={kernelName:Fs,backendName:"webgl",kernelFunc:Rj},Mj=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,$j=Je({opSnippet:Mj}),Dj={kernelName:Eo,backendName:"webgl",kernelFunc:$j},Oj=`
|
|
float epsilon = 1.1920928955078125e-7;
|
|
float threshold = log(epsilon) + 2.0;
|
|
|
|
bool too_large = x > -threshold;
|
|
bool too_small = x < threshold;
|
|
|
|
float result;
|
|
float exp_x = exp(x);
|
|
|
|
if (too_large){
|
|
result = x;
|
|
}
|
|
else if (too_small){
|
|
result = exp_x;
|
|
}
|
|
else{
|
|
result = log(exp_x + 1.0);
|
|
}
|
|
return result;
|
|
`,zj=Je({opSnippet:Oj}),Pj={kernelName:Ro,backendName:"webgl",kernelFunc:zj},Lj=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;k.assert(a.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,g)=>y*g),l=[[0,0]];l.push(...i);for(let y=1+s.length;y<a.shape.length;++y)l.push([0,0]);let c=[],u=H_({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),h=C.getReshaped(u.shape,s,o,!1),d=C.getPermuted(h.length,s.length,!1),p=C.getReshapedPermuted(u.shape,s,o,!1),f=ge({inputs:{x:u},backend:n,attrs:{shape:h}}),m=mn({inputs:{x:f},backend:n,attrs:{perm:d}}),A=ge({inputs:{x:m},backend:n,attrs:{shape:p}});return c.push(u),c.push(f),c.push(m),c.forEach(y=>n.disposeIntermediateTensorInfo(y)),A},Wj={kernelName:yu,backendName:"webgl",kernelFunc:Lj};function Bj(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:c,strides:u,outputSize:h}=C.calculateShapes(s,a,o),d=!1,p=new G_(c,l,a.shape.length,s.shape.length,u,[h,1],d),f=n.runWebGLProgram(p,[s,a,i],s.dtype),m=ge({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),m}var Vj={kernelName:Hh,backendName:"webgl",kernelFunc:Bj};function Uj(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=k.parseAxisParam(i,a.shape)[0],l=C.prepareSplitSize(a,s,o),c=a.shape.length,u=new Array(c).fill(0),h=a.shape.slice();return l.map(d=>{let p=[...h];p[o]=d;let f=dc({inputs:{x:a},backend:n,attrs:{begin:u,size:p}});return u[o]+=d,f})}var Hj={kernelName:Fo,backendName:"webgl",kernelFunc:Uj},jj="return sqrt(x);",Gj=Je({opSnippet:jj}),qj={kernelName:$s,backendName:"webgl",kernelFunc:Gj},Xj="return x * x;",Kj=Je({opSnippet:Xj}),Zj={kernelName:gu,backendName:"webgl",kernelFunc:Kj},q_="return (a - b) * (a - b);",Jj=Zt({opSnippet:q_,packedOpSnippet:q_}),Yj={kernelName:zs,backendName:"webgl",kernelFunc:Jj};function Qj({inputs:e,attrs:t,backend:n}){let{x:r}=e,a=mr+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,s=new Ra(r.shape,a);return n.runWebGLProgram(s,[r],r.dtype)}var eG={kernelName:ya,backendName:"webgl",kernelFunc:Qj},tG=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,a=ht(n.length),s=ht(n.length),i="";if(r===1)i="coords * strides + begin";else{let o=0;i=n.map((l,c)=>(o++,n.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${o-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=`
|
|
${a} begin = ${a}(${e});
|
|
${a} strides = ${a}(${t});
|
|
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}};function nG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r,{nonStrided:p,$begin:f,$strides:m,size:A,newShape:y,outShape:g}=rn.sliceInfo(a.shape,s,i,o,l,c,u,h,d),b=ge({inputs:{x:a},backend:n,attrs:{shape:y}}),x;if(p){let _=dc({inputs:{x:b},backend:n,attrs:{begin:f,size:A}});x=ge({inputs:{x:_},backend:n,attrs:{shape:g}}),n.disposeIntermediateTensorInfo(_)}else if(g.some(_=>_===0))x=n.makeTensorInfo(g,a.dtype,[]);else if(n.shouldExecuteOnCPU([b])){let _=n.texData.get(b.dataId).values,N=We(b.shape,b.dtype,_),T=rP(g,N,m,f);x=n.makeTensorInfo(g,b.dtype,T.values)}else{let _=new tG(f,m,g);x=n.runWebGLProgram(_,[b],b.dtype)}let w=ge({inputs:{x},backend:n,attrs:{shape:g}});return n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(x),w}var rG={kernelName:Mo,backendName:"webgl",kernelFunc:nG},aG="return tan(x);",sG=Je({opSnippet:aG}),iG={kernelName:$o,backendName:"webgl",kernelFunc:sG},oG=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,lG=Je({opSnippet:oG}),uG={kernelName:Ls,backendName:"webgl",kernelFunc:lG},hG=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[s]*t[s];this.outputShape=n,this.rank=n.length;let r=ht(this.rank),a=cG(e);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${a}));
|
|
}
|
|
`}};function cG(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let a=0;a<e.length;a++)r.push(`imod(${n[a]}, ${e[a]})`);return r.join()}function X_(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;if(a.dtype==="string"){let o=n.readSync(a.dataId).map(u=>k.decodeString(u)),l=We(a.shape,a.dtype,o),c=sP(l,s);return n.makeTensorInfo(c.shape,c.dtype,c.values)}let i=new hG(a.shape,s);return n.runWebGLProgram(i,[a],a.dtype)}var dG={kernelName:Aa,backendName:"webgl",kernelFunc:X_};function pG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r,o=n.readSync(a.dataId),[l,c]=iP(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(c.shape,c.dtype,c.values)]}var fG={kernelName:Do,backendName:"webgl",kernelFunc:pG};function mG(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;fl(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=r.readSync(s.dataId),{outputValues:o,outputShape:l,indices:c}=oP(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([c.length],"int32",c)]}var AG={kernelName:jh,backendName:"webgl",kernelFunc:mG};function yG(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a,o=i.shape.length,l=a.shape[s],c=new Array(o-1),u=0;for(let m=0;m<o;m++)m!==s&&(c[u++]=i.shape[m]);let h=[],d=new Array(o).fill(0),p=i.shape.slice();p[s]=1;let f=new Array(l);for(let m=0;m<f.length;m++){d[s]=m;let A=dc({inputs:{x:i},backend:n,attrs:{begin:d,size:p}}),y=ge({inputs:{x:A},backend:n,attrs:{shape:c}});f[m]=y,h.push(A)}return h.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var gG={kernelName:Oo,backendName:"webgl",kernelFunc:yG},xG=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,a=e.inSize,s=e.numSegments,i=s*Math.ceil(a/n);this.outputShape=[r,i];let o="0.0",l="sumValue",c=Math.floor(n/4)*4,u=n%4,h=`
|
|
sumValue += dot(values, segFilter);
|
|
`,d="";a%n>0&&(d=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return initializationValue;
|
|
}
|
|
`);let p="";a%n>0&&(p=`
|
|
if (inIdx < 0 || inIdx >= ${a}) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${o};
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${d}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
${p}
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
${s})) * float(${n}));
|
|
int currentSeg = int(mod(float(outIdx), float(${s})));
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${c}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0
|
|
);
|
|
|
|
${h}
|
|
}
|
|
|
|
int inIdx = inOffset + ${c};
|
|
if (${u===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
int inIdxSeg = int(getSegmentIdAtIndex(inIdx));
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
} else if (${u===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
0
|
|
);
|
|
|
|
${h}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function wG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r,o=a.shape.length,l=[],c=0,u=C.getAxesPermutation([c],o),h=a;u!=null&&(h=mn({inputs:{x:a},backend:n,attrs:{perm:u}}),l.push(h),c=C.getInnerMostAxes(1,o)[0]);let d=C.segment_util.computeOutShape(h.shape,c,i),p=k.sizeFromShape([h.shape[c]]),f=ge({inputs:{x:h},backend:n,attrs:{shape:[-1,p]}});l.push(f);let m=Xh(a.dtype),A=(x,w,_,N,T)=>{let E=x.shape[0],M=x.shape[1],z=C.segment_util.segOpComputeOptimalWindowSize(M,T),P={windowSize:z,inSize:M,batchSize:E,numSegments:T},B=new xG(P,w),G=n.compileAndRun(B,[x,_],N);if(l.push(G),G.shape[1]===T)return G;let V=j_({backend:n,attrs:{start:0,stop:T,step:1,dtype:"float32"}}),K=X_({inputs:{x:V},backend:n,attrs:{reps:[M/z]}});return l.push(V),l.push(K),A(G,w,K,N,T)},y=A(f,"unsortedSegmentSum",s,m,i),g=ge({inputs:{x:y},backend:n,attrs:{shape:d}}),b=g;if(u!=null){l.push(g);let x=C.getUndoAxesPermutation(u);b=mn({inputs:{x:b},backend:n,attrs:{perm:x}})}return l.forEach(x=>n.disposeIntermediateTensorInfo(x)),b}var _G={kernelName:xu,backendName:"webgl",kernelFunc:wG},bG=[fU,yU,nL,aL,oL,cL,dL,mL,yL,xL,vL,IL,TL,RL,PL,$L,BL,jL,UL,KL,JL,QL,rW,cW,dW,gW,wW,kW,SW,zP,RW,BW,UW,DW,qW,KW,jW,YW,tB,aB,iB,lB,hB,yB,xB,pB,bB,IB,EB,MB,zB,WB,BB,VB,HB,GB,XB,ZB,YB,nV,iV,lV,cV,pV,yV,_V,IV,OP,SV,CW,CV,MV,OV,LP,WV,HV,GV,QV,ZV,rU,iU,cU,xU,SU,IU,RU,MU,DU,vU,zU,LU,UU,qU,JU,sH,HP,oH,cH,pH,AH,fW,xH,_H,vH,NH,CH,BP,FH,MH,mW,tH,OH,HH,WH,GP,XH,JH,ej,rj,oj,uj,dj,mj,yj,wj,vj,Nj,Ej,Fj,Dj,lW,rH,Pj,Wj,Vj,Hj,qj,Zj,Yj,eG,rG,nH,QP,iG,uG,dG,fG,eL,AG,gG,_G,wH];for(let e of bG)Lo(e);var Cn;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(Cn||(Cn={}));var fc;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu"})(fc||(fc={}));var K_;function vG(e){K_=e.wasm.cwrap(Bs,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function kG(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:c,activation:u,leakyreluAlpha:h}=r,d=n.dataIdMap.get(a.dataId).id,p=n.dataIdMap.get(s.dataId).id,f=0;if(i!=null){let T=n.dataIdMap.get(i.dataId);if(T.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${T.shape.length}.`);f=T.id}let m=o==null?0:n.dataIdMap.get(o.dataId).id,A=fc[u];if(A==null)throw new Error(`${u} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?a.shape[2]:a.shape[1],g=c?s.shape[1]:s.shape[2],b=a.shape[0],x=n.makeOutput([b,y,g],a.dtype),w=n.dataIdMap.get(x.dataId).id,_=new Uint8Array(new Int32Array(a.shape).buffer),N=new Uint8Array(new Int32Array(s.shape).buffer);return K_(d,_,a.shape.length,p,N,s.shape.length,l,c,A,f,m,h||0,w),x}var IG={kernelName:Bs,backendName:"wasm",setupFunc:vG,kernelFunc:kG};function An(e){let t;function n(a){t=a.wasm.cwrap(e,null,["number","number"])}function r(a){let{backend:s,inputs:{x:i}}=a,o=s.dataIdMap.get(i.dataId).id,l=s.makeOutput(i.shape,i.dtype),c=s.dataIdMap.get(l.dataId).id;return k.sizeFromShape(l.shape)===0||t(o,c),l}return{kernelName:e,backendName:"wasm",setupFunc:n,kernelFunc:r}}var NG=An(Li);function un(e,t,n){let r;function a(i){r=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:c,b:u}=l,h=o.dataIdMap.get(c.dataId).id,d=o.dataIdMap.get(u.dataId).id,p=n!=null?n:c.dtype,f=C.assertAndGetBroadcastShape(c.shape,u.shape),m=o.makeOutput(f,p);if(k.sizeFromShape(f)===0)return m;let A=new Uint8Array(new Int32Array(c.shape).buffer),y=new Uint8Array(new Int32Array(u.shape).buffer),g=o.dataIdMap.get(m.dataId).id,b=()=>r(h,A,c.shape.length,d,y,u.shape.length,Cn[c.dtype],g);if(t&&c.dtype==="float32")return b(),m;let x=C.getBroadcastDims(c.shape,f),w=C.getBroadcastDims(u.shape,f),_=x.every((T,E)=>T===E),N=w.every((T,E)=>T===E);if(_&&N)return b(),m;throw new Error(`Broadcasting along outer dims is not yet supported for ${c.dtype} ${e}.`)}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:s}}var SG=!0,TG=un(fa,SG),Z_;function EG(e){Z_=e.wasm.cwrap(Ka,null,["array","number","number","number"])}function CG(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(k.sizeFromShape(r.shape)===0)return r;let a=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(a).buffer),i=n.dataIdMap.get(r.dataId).id;return Z_(s,a.length,Cn[r.dtype],i),r}var RG={kernelName:Ka,backendName:"wasm",setupFunc:EG,kernelFunc:CG};function mp(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype),a=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(a),r}var FG={kernelName:ds,backendName:"wasm",kernelFunc:mp},J_;function MG(e){J_=e.wasm.cwrap(Ws,null,["number","array","number","number","number","array","number"])}function Ap(e){let{inputs:t,backend:n,attrs:r}=e,[a,s]=DG(t.x.shape,r.perm),i=!0;for(let f=0;f<s.length;f++)s[f]!==f&&(i=!1);let o=$G(t.x.shape,r.perm),l={dataId:t.x.dataId,shape:a,dtype:t.x.dtype};if(i){let f=mp({inputs:t,backend:n});return f.shape=o,f}let c=n.makeOutput(o,l.dtype),u=n.dataIdMap.get(l.dataId).id,h=n.dataIdMap.get(c.dataId).id,d=new Uint8Array(new Int32Array(s).buffer),p=new Uint8Array(new Int32Array(l.shape).buffer);return J_(u,p,l.shape.length,Cn[l.dtype],h,d,s.length),c}function $G(e,t){let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];return n}function DG(e,t){let n=[],r=[];for(let a=0;a<e.length;++a)e[a]!==1&&n.push(e[a]),e[t[a]]!==1&&r.push(t[a]);for(let a=0;a<r.length;++a){let s=-1;for(let i=0;i<r.length;++i)r[i]>=a&&(s===-1||r[s]>r[i])&&(s=i);r[s]=a}return[n,r]}var OG={kernelName:Ws,backendName:"wasm",kernelFunc:Ap,setupFunc:MG};function kl(e,t,n){let r=e.shape,a=e.shape.length,s=k.parseAxisParam(t,r),i=s,o=C.getAxesPermutation(i,a),l=null,c=!1;if(o!=null){let u=new Array(a);for(let d=0;d<u.length;d++)u[d]=r[o[d]];i=C.getInnerMostAxes(i.length,a),l=Ap({inputs:{x:e},attrs:{perm:o},backend:n});let h=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==h&&(c=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:c}}var Y_;function zG(e){Y_=e.wasm.cwrap(Za,null,["number","number","number","number","number"])}function PG(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=i,l=s,{transposed:c,axes:u,inputWasTransposed:h}=kl(s,a,t);if(h){let y=t.dataIdMap.get(c.dataId).id;y!==i&&(l=c,o=y)}let d=l.shape.slice(0,-1),p=t.makeOutput(d,"int32"),f=t.dataIdMap.get(p.dataId).id,m=k.sizeFromShape(p.shape),A=l.shape[u[0]];return Y_(o,Cn[l.dtype],m,A,f),h&&t.disposeData(c.dataId),p}var LG={kernelName:Za,backendName:"wasm",kernelFunc:PG,setupFunc:zG},Q_;function WG(e){Q_=e.wasm.cwrap(Ja,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function BG(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=n,u=C.computePool2DInfo(a.shape,i,o,1,l,c),h=u.filterHeight,d=u.filterWidth,p=u.padInfo.top,f=u.padInfo.right,m=u.padInfo.bottom,A=u.padInfo.left,y=u.strideHeight,g=u.strideWidth,b=u.inChannels;if(u.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${u.dataFormat}'. Please use 'channelsLast'.`);if(u.dilationWidth!==1||u.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${u.dilationHeight}, ${u.dilationWidth}].`);let x=r.makeOutput(u.outShape,"float32"),w=r.dataIdMap.get(x.dataId).id;return Q_(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,b,w),x}var VG={kernelName:Ja,backendName:"wasm",setupFunc:WG,kernelFunc:BG};function Ar(e){let{inputs:t,attrs:n}=e,{x:r}=t,{shape:a}=n,s=k.sizeFromShape(r.shape),i=k.inferFromImplicitShape(a,s);return k.assert(s===k.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:i,dtype:r.dtype}}var UG={kernelName:ko,backendName:"wasm",kernelFunc:Ar},eb;function HG(e){eb=e.wasm.cwrap(Ya,null,["number","array","number","number","array","number","number","number","number"])}function jG(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;if(a.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=a.shape.length,c=s.shape.length,u=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[c-1]:s.shape[c-2],d=i?a.shape[l-1]:a.shape[l-2],p=o?s.shape[c-2]:s.shape[c-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),A=k.sizeFromShape(f),y=k.sizeFromShape(m),g=A===y||A===1||y===1;k.assert(l>=2&&c>=2&&g,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${f}) and (${m}).`);let b=(A>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([d,p]);k.assert(u===h,()=>`Error in matMul: inner shapes (${u}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[A,u,d]:[A,d,u],w=o?[y,p,h]:[y,h,p],_=Ar({inputs:{x:a},backend:n,attrs:{shape:x}}),N=Ar({inputs:{x:s},backend:n,attrs:{shape:w}}),T=n.dataIdMap.get(_.dataId).id,E=n.dataIdMap.get(N.dataId).id,M=i?_.shape[2]:_.shape[1],z=o?N.shape[1]:N.shape[2],P=Math.max(A,y),B=n.makeOutput([P,M,z],_.dtype),G=n.dataIdMap.get(B.dataId).id,V=new Uint8Array(new Int32Array(_.shape).buffer),K=new Uint8Array(new Int32Array(N.shape).buffer);return eb(T,V,_.shape.length,E,K,N.shape.length,i,o,G),n.disposeData(_.dataId),n.disposeData(N.dataId),B.shape=b,B}var GG={kernelName:Ya,backendName:"wasm",setupFunc:HG,kernelFunc:jG};function yp(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,a=r.makeOutput(t.shape,n),s=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(a).set(s),a}var qG={kernelName:Qa,backendName:"wasm",kernelFunc:yp},XG=An(es),tb;function KG(e){tb=e.wasm.cwrap(ma,null,["number","number","number","number"])}function ZG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o=n.dataIdMap.get(a.dataId).id,l=n.makeOutput(a.shape,a.dtype),c=n.dataIdMap.get(l.dataId).id;return tb(o,s,i,c),l}var JG={kernelName:ma,backendName:"wasm",setupFunc:KG,kernelFunc:ZG};function nb(e){let{inputs:t,backend:n}=e,r=k.parseAxisParam(e.attrs.axis,t[0].shape)[0],a=C.computeOutShape(t.map(p=>p.shape),r),s=t.filter(p=>k.sizeFromShape(p.shape)>0);if(s.length===1)return mp({inputs:{x:s[0]},backend:n});let i=n.makeOutput(a,t[0].dtype);if(k.sizeFromShape(a)===0)return i;let o=s.map(p=>p.shape);if(C.assertParamsConsistent(o,r),s[0].dtype==="string"){let p=s.map(b=>{let x=k.sizeFromShape(b.shape.slice(r));return Ar({inputs:{x:b},backend:n,attrs:{shape:[-1,x]}})}),f=p.map(b=>({vals:n.readSync(b.dataId),shape:b.shape}));a=C.computeOutShape(p.map(b=>b.shape),1);let m=p[0].shape[0]===1,A=iA(f,a,t[0].dtype,m),y=C.computeOutShape(s.map(b=>b.shape),r);i.shape=y;let g=n.dataIdMap.get(i.dataId);return g.stringBytes=C.fromStringArrayToUint8(A),i}let l=k.sizeFromShape(s[0].shape.slice(0,r)),c=0,u=s.map(p=>{let f=k.sizeFromShape(p.shape.slice(r));return c+=f,f}),h=s.map(p=>n.typedArrayFromHeap(p)),d=n.typedArrayFromHeap(i);for(let p=0;p<l;p++){let f=p*c;for(let m=0;m<h.length;m++){let A=u[m],y=p*A,g=h[m].subarray(y,y+A);d.set(g,f),f+=A}}return i}var YG={kernelName:qi,backendName:"wasm",kernelFunc:nb},rb;function QG(e){rb=e.wasm.cwrap(ts,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function eq(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:c,pad:u,dimRoundingMode:h,dataFormat:d}=n,p=C.convertConv2DDataFormat(d),f=C.computeConv2DInfo(a.shape,s.shape,l,c,u,h,!1,p),m=f.filterHeight,A=f.filterWidth,y=f.padInfo.top,g=f.padInfo.right,b=f.padInfo.bottom,x=f.padInfo.left,w=f.dilationHeight,_=f.dilationWidth,N=f.strideHeight,T=f.strideWidth,E=f.inChannels,M=f.outChannels,z=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let P=r.makeOutput(f.outShape,"float32"),B=r.dataIdMap.get(P.dataId).id;return rb(i,a.shape[0],a.shape[1],a.shape[2],o,m,A,y,g,b,x,z,w,_,N,T,E,M,B),P}var tq={kernelName:ts,backendName:"wasm",setupFunc:QG,kernelFunc:eq},ab;function nq(e){ab=e.wasm.cwrap(ns,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function rq(e){let{backend:t,inputs:n,attrs:r}=e,{dy:a,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:c,inputShape:u}=r,h=1,d=C.convertConv2DDataFormat(l),p=C.computeConv2DInfo(u,s.shape,i,h,o,c,!1,d),{batchSize:f,filterHeight:m,filterWidth:A,inChannels:y,inHeight:g,inWidth:b,outChannels:x,outHeight:w,outWidth:_,strideHeight:N,strideWidth:T}=p,E=m-1-p.padInfo.top,M=A-1-p.padInfo.left,z=p.dataFormat==="channelsLast",P=k.computeStrides(p.inShape),B=k.computeStrides(a.shape),[G,V,K]=k.computeStrides(s.shape),X=P[0],ee=z?P[1]:P[2],J=z?P[2]:1,ae=z?1:P[1],Y=B[0],ue=z?B[1]:B[2],ne=z?B[2]:1,de=z?1:B[1],he=t.makeOutput(p.inShape,"float32"),me=t.dataIdMap.get(he.dataId).id,Ae=t.dataIdMap.get(a.dataId).id,ke=t.dataIdMap.get(s.dataId).id;return ab(Ae,ke,f,m,A,g,b,y,w,_,x,N,T,E,M,G,V,K,X,ee,J,ae,Y,ue,ne,de,me),he}var aq={kernelName:ns,backendName:"wasm",setupFunc:nq,kernelFunc:rq},sq=An(rs),LA;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(LA||(LA={}));var sb;function iq(e){sb=e.wasm.cwrap(Ki,null,["number","number","number","number","array","number","number","number","number","number"])}function oq(e){let{backend:t,inputs:n,attrs:r}=e,{method:a,extrapolationValue:s,cropSize:i}=r,{image:o,boxes:l,boxInd:c}=n,u=l.shape[0],[h,d]=i,p=[u,h,d,o.shape[3]],f=t.dataIdMap.get(o.dataId),m;o.dtype!=="float32"&&(m=yp({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(m.dataId));let A=f.id,y=t.dataIdMap.get(l.dataId).id,g=t.dataIdMap.get(c.dataId).id,b=t.makeOutput(p,"float32"),x=t.dataIdMap.get(b.dataId).id,w=new Uint8Array(new Int32Array(o.shape).buffer);return sb(A,y,g,u,w,h,d,LA[a],s,x),m!=null&&t.disposeData(m.dataId),b}var lq={kernelName:Ki,backendName:"wasm",setupFunc:iq,kernelFunc:oq},ib;function uq(e){ib=e.wasm.cwrap(as,null,["number","number","number","number","number","number"])}function cq(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length;k.assert(a.dtype==="float32"||a.dtype==="int32",()=>`cumsum does not support ${a.dtype} tensors in the WASM backend`);let c=C.getAxesPermutation([s],l),u=a;c!==null&&(u=Ap({inputs:{x:a},attrs:{perm:c},backend:n}));let h=C.getInnerMostAxes(1,l)[0];C.assertAxesAreInnerMostDims("cumsum",[h],l);let d=n.makeOutput(u.shape,u.dtype),p=u.shape[h],f=n.dataIdMap.get(u.dataId).id,m=n.dataIdMap.get(d.dataId).id;ib(f,i?1:0,o?1:0,p,m,Cn[a.dtype]);let A=d;if(c!==null){let y=C.getUndoAxesPermutation(c);A=Ap({inputs:{x:d},attrs:{perm:y},backend:n}),n.disposeData(u.dataId),n.disposeData(d.dataId)}return A}var hq={kernelName:as,backendName:"wasm",setupFunc:uq,kernelFunc:cq},ob;function dq(e){ob=e.wasm.cwrap(Zi,null,["number","number","number","array","number","array","array","number","number"])}function pq(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{blockSize:s,dataFormat:i}=r;k.assert(s>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`);let o=a.shape[0],l=i==="NHWC"?a.shape[1]:a.shape[2],c=i==="NHWC"?a.shape[2]:a.shape[3],u=i==="NHWC"?a.shape[3]:a.shape[1],h=l*s,d=c*s,p=u/(s*s),f=i==="NHWC"?[o,h,d,p]:[o,p,h,d],m=t.makeOutput(f,"float32"),A=t.dataIdMap.get(a.dataId).id,y=new Uint8Array(new Int32Array(k.computeStrides(a.shape)).buffer),g=new Uint8Array(new Int32Array(f).buffer),b=new Uint8Array(new Int32Array(k.computeStrides(f)).buffer),x=t.dataIdMap.get(m.dataId).id;return ob(A,s,i==="NHWC"?1:0,y,a.shape.length-1,g,b,f.length,x),m}var fq={kernelName:Zi,backendName:"wasm",setupFunc:dq,kernelFunc:pq},lb;function mq(e){lb=e.wasm.cwrap(ss,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Aq(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:c,pad:u,dimRoundingMode:h}=n,d=c==null?[1,1]:c,p=C.computeConv2DInfo(a.shape,s.shape,l,d,u,h,!0),f=p.filterHeight,m=p.filterWidth,A=p.padInfo.top,y=p.padInfo.right,g=p.padInfo.bottom,b=p.padInfo.left,x=p.dilationHeight,w=p.dilationWidth,_=p.strideHeight,N=p.strideWidth,T=p.inChannels,E=p.outChannels,M=p.padInfo.type==="SAME"?1:0;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let z=r.makeOutput(p.outShape,"float32"),P=r.dataIdMap.get(z.dataId).id;return lb(i,a.shape[0],a.shape[1],a.shape[2],o,f,m,A,y,g,b,M,x,w,_,N,T,E,P),z}var yq={kernelName:ss,backendName:"wasm",setupFunc:mq,kernelFunc:Aq},gq=!1,xq=un(Qi,gq,"bool"),wq=An(os);function WA(e){let{inputs:t,attrs:n,backend:r}=e,{input:a}=t,{dim:s}=n,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Ar({inputs:{x:a},backend:r,attrs:{shape:o}})}var _q={kernelName:eo,backendName:"wasm",kernelFunc:WA};function bq(e){let{attrs:{shape:t,value:n,dtype:r},backend:a}=e,s=a.makeOutput(t,r);return a.typedArrayFromHeap(s).fill(n),s}var vq={kernelName:uu,backendName:"wasm",kernelFunc:bq},ub;function kq(e){ub=e.wasm.cwrap(no,null,["number","number","number","number","number","number"])}function Iq(e){let{inputs:t,backend:n}=e,{image:r}=t,a=n.makeOutput(r.shape,r.dtype),s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,[o,l,c,u]=r.shape;return ub(s,o,l,c,u,i),a}var Nq={kernelName:no,backendName:"wasm",kernelFunc:Iq,setupFunc:kq},Sq=An(ls),Tq=!1,Eq=un(us,Tq),cb;function Cq(e){cb=e.wasm.cwrap(cs,null,["number","number","number","number","number","number","number"])}function Rq(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:a}=r,{x:s,mean:i,variance:o,offset:l,scale:c}=n,u=t.dataIdMap.get(s.dataId).id,h=t.dataIdMap.get(i.dataId).id,d=t.dataIdMap.get(o.dataId).id,p=l!=null?t.dataIdMap.get(l.dataId).id:0,f=c!=null?t.dataIdMap.get(c.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(k.sizeFromShape(s.shape)===0)return m;let A=t.dataIdMap.get(m.dataId).id;return cb(u,h,d,p,f,a,A),m}var Fq={kernelName:cs,backendName:"wasm",setupFunc:Cq,kernelFunc:Rq},hb;function Mq(e){hb=e.wasm.cwrap(Vs,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function $q(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=C.computeConv2DInfo(a.shape,s.shape,l,u,c,d),A=fc[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,b=m.outChannels,x=0;if(i!=null){let ne=r.dataIdMap.get(i.dataId);if(ne.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ne.shape.length}.`);if(ne.shape[0]!==b)throw new Error(`FusedConv2D bias shape (${ne.shape}) does not match the number of output channels (${b})`);x=ne.id}let w=m.filterHeight,_=m.filterWidth,N=m.padInfo.top,T=m.padInfo.right,E=m.padInfo.bottom,M=m.padInfo.left,z=m.dilationHeight,P=m.dilationWidth,B=m.strideHeight,G=m.strideWidth,V=m.inChannels,K=m.padInfo.type==="SAME"?1:0,X=m.batchSize,ee=m.inHeight,J=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let ae=r.makeOutput(m.outShape,"float32"),Y=r.dataIdMap.get(ae.dataId).id,ue=o==null?0:r.dataIdMap.get(o.dataId).id;return hb(y,X,ee,J,g,w,_,x,N,T,E,M,K,z,P,B,G,V,b,A,ue,f||0,Y),ae}var Dq={kernelName:Vs,backendName:"wasm",setupFunc:Mq,kernelFunc:$q},db;function Oq(e){db=e.wasm.cwrap(Us,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function zq(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:c,dilations:u,dataFormat:h,dimRoundingMode:d,activation:p,leakyreluAlpha:f}=n,m=C.computeConv2DInfo(a.shape,s.shape,l,u,c,d,!0),A=fc[p];if(A==null)throw new Error(`${p} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,g=r.dataIdMap.get(s.dataId).id,b=m.outChannels,x=0;if(i!=null){let ne=r.dataIdMap.get(i.dataId);if(ne.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ne.shape.length}.`);if(ne.shape[0]!==b)throw new Error(`FusedDepthwiseConv2D bias shape (${ne.shape}) does not match the number of output channels (${b})`);x=ne.id}let w=m.filterHeight,_=m.filterWidth,N=m.padInfo.top,T=m.padInfo.right,E=m.padInfo.bottom,M=m.padInfo.left,z=m.dilationHeight,P=m.dilationWidth,B=m.strideHeight,G=m.strideWidth,V=m.inChannels,K=m.padInfo.type==="SAME"?1:0,X=m.batchSize,ee=m.inHeight,J=m.inWidth;if(h!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${h}'. Please use 'NHWC'.`);let ae=r.makeOutput(m.outShape,"float32"),Y=r.dataIdMap.get(ae.dataId).id,ue=o==null?0:r.dataIdMap.get(o.dataId).id;return db(y,X,ee,J,g,w,_,x,N,T,E,M,K,z,P,B,G,V,b,A,ue,f||0,Y),ae}var Pq={kernelName:Us,backendName:"wasm",setupFunc:Oq,kernelFunc:zq},pb;function Lq(e){pb=e.wasm.cwrap(ao,null,["number","number","number","number","number","number","array","number"])}function Wq(e){let{backend:t,inputs:n}=e,{params:r,indices:a}=n,[s,i,o,l]=Rf.prepareAndValidate(r,a),c=t.makeOutput(s,r.dtype);if(i===0)return c;let u=a.shape,h=u[u.length-1],d=t.dataIdMap.get(r.dataId).id,p=t.dataIdMap.get(a.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(c.dataId).id;return pb(d,Cn[r.dtype],p,i,h,o,f,m),c}var Bq={kernelName:ao,backendName:"wasm",setupFunc:Lq,kernelFunc:Wq},fb;function Vq(e){fb=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Uq(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,indices:s}=n,{axis:i,batchDims:o}=r,l=k.parseAxisParam(i,a.shape)[0],c=C.segment_util.collectGatherOpShapeInfo(a,s,l,o),u=Ar({inputs:{x:a},attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]},backend:t}),h=k.sizeFromShape(s.shape),d=Ar({inputs:{x:s},attrs:{shape:[c.batchSize,h/c.batchSize]},backend:t}),p=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],f=t.makeOutput(p,a.dtype);if(k.sizeFromShape(a.shape)===0)return f;let m=u.shape.length-1,A=t.dataIdMap.get(u.dataId).id,y=t.dataIdMap.get(d.dataId).id,g=t.dataIdMap.get(f.dataId).id,b=new Uint8Array(new Int32Array(k.computeStrides(u.shape)).buffer),x=new Uint8Array(new Int32Array(k.computeStrides(p)).buffer);return fb(A,Cn[a.dtype],b,m,y,c.batchSize,x,g),t.disposeData(u.dataId),t.disposeData(d.dataId),f.shape=c.outputShape,f}var Hq={kernelName:ro,backendName:"wasm",setupFunc:Vq,kernelFunc:Uq},jq=!1,Gq=un(so,jq,"bool"),qq=!1,Xq=un(hs,qq,"bool"),mb;function Kq(e){mb=e.wasm.cwrap(ps,null,["number","number","number"])}function Zq(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,a=r.dataIdMap.get(t.dataId).id,s=r.makeOutput(t.shape,t.dtype);if(k.sizeFromShape(t.shape)!==0){let i=r.dataIdMap.get(s.dataId).id;mb(a,n,i)}return s}var Jq={kernelName:ps,backendName:"wasm",setupFunc:Kq,kernelFunc:Zq},Yq=!1,Qq=un(uo,Yq,"bool"),eX=!1,tX=un(co,eX,"bool"),nX=An(fs),rX=!1,aX=un(po,rX,"bool"),Ab;function sX(e){Ab=e.wasm.cwrap(ms,null,["number, number, number"])}function iX(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:c,axes:u,originalAxes:h,inputWasTransposed:d}=kl(i,a,t);if(d){let g=t.dataIdMap.get(c.dataId).id;l=c,o=g}let p=l.shape.length;C.assertAxesAreInnerMostDims("max",u,p);let[f,m]=C.computeOutAndReduceShapes(l.shape,u),A=k.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(k.sizeFromShape(l.shape)!==0){let g=t.dataIdMap.get(y.dataId).id;Ab(o,A,g)}if(d&&t.disposeData(c.dataId),s){let g=C.expandShapeToKeepDim(y.shape,h);y.shape=g}return y}var oX={kernelName:ms,backendName:"wasm",setupFunc:sX,kernelFunc:iX},lX=!1,uX=un(As,lX),yb;function cX(e){yb=e.wasm.cwrap(ys,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function hX(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:c}=n,u=C.computePool2DInfo(a.shape,i,o,1,l,c),h=u.filterHeight,d=u.filterWidth,p=u.padInfo.top,f=u.padInfo.right,m=u.padInfo.bottom,A=u.padInfo.left,y=u.dilationHeight,g=u.dilationWidth,b=u.strideHeight,x=u.strideWidth,w=u.inChannels,_=u.outChannels;if(u.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${u.dataFormat}'. Please use 'channelsLast'.`);let N=r.makeOutput(u.outShape,"float32"),T=r.dataIdMap.get(N.dataId).id;return yb(s,a.shape[0],a.shape[1],a.shape[2],h,d,p,f,m,A,y,g,b,x,w,_,T),N}var dX={kernelName:ys,backendName:"wasm",setupFunc:cX,kernelFunc:hX},gb;function pX(e){gb=e.wasm.cwrap(gs,null,["number, number, number"])}function fX(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=kl(i,a,t),f=h;if(p){let x=t.dataIdMap.get(u.dataId).id;x!==o&&(c=u,l=x,f=C.getInnerMostAxes(f.length,c.shape.length))}C.assertAxesAreInnerMostDims("mean",f,c.shape.length);let[m,A]=C.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=c;c.dtype!=="float32"&&(g=yp({backend:t,inputs:{x:c},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(g.dataId).id);let b=t.makeOutput(m,"float32");if(k.sizeFromShape(c.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;gb(l,y,x)}if(p&&t.disposeData(u.dataId),s){let x=C.expandShapeToKeepDim(b.shape,d);b.shape=x}return c.dtype!=="float32"&&t.disposeData(g.dataId),b}var mX={kernelName:gs,backendName:"wasm",setupFunc:pX,kernelFunc:fX},xb;function AX(e){xb=e.wasm.cwrap(xs,null,["number, number, number"])}function yX(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=kl(i,a,t);if(p){let b=t.dataIdMap.get(u.dataId).id;b!==o&&(c=u,l=b)}let f=c.shape.length;C.assertAxesAreInnerMostDims("min",h,f);let[m,A]=C.computeOutAndReduceShapes(c.shape,h),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let b=t.dataIdMap.get(g.dataId).id;xb(l,y,b)}if(p&&t.disposeData(u.dataId),s){let b=C.expandShapeToKeepDim(g.shape,d);g.shape=b}return g}var gX={kernelName:xs,backendName:"wasm",setupFunc:AX,kernelFunc:yX},xX=!1,wX=un(ws,xX),_X=!0,bX=un(_s,_X),vX=An(mo);function BA(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],a=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:a,pSelectedScores:s,pValidOutputs:i}}var wb;function kX(e){wb=e.wasm.cwrap(yo,"number",["number","number","number","number","number"])}function IX(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i}=r,{boxes:o,scores:l}=n,c=t.dataIdMap.get(o.dataId).id,u=t.dataIdMap.get(l.dataId).id,h=wb(c,u,s,a,i),{pSelectedIndices:d,selectedSize:p,pSelectedScores:f,pValidOutputs:m}=BA(t,h);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([p],"int32",d)}var NX={kernelName:yo,backendName:"wasm",setupFunc:kX,kernelFunc:IX},_b;function SX(e){_b=e.wasm.cwrap(go,"number",["number","number","number","number","number","bool"])}function TX(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=r,{boxes:l,scores:c}=n,u=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(c.dataId).id,d=_b(u,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=BA(t,d);t.wasm._free(m);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([],"int32",A);return[y,g]}var EX={kernelName:go,backendName:"wasm",setupFunc:SX,kernelFunc:TX},bb;function CX(e){bb=e.wasm.cwrap(xo,"number",["number","number","number","number","number","number"])}function RX(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=r,{boxes:l,scores:c}=n,u=t.dataIdMap.get(l.dataId).id,h=t.dataIdMap.get(c.dataId).id,d=bb(u,h,s,a,i,o),{pSelectedIndices:p,selectedSize:f,pSelectedScores:m,pValidOutputs:A}=BA(t,d);t.wasm._free(A);let y=t.makeOutput([f],"int32",p),g=t.makeOutput([f],"float32",m);return[y,g]}var FX={kernelName:xo,backendName:"wasm",setupFunc:CX,kernelFunc:RX},MX=!1,$X=un(Ao,MX,"bool"),vb;function DX(e){vb=e.wasm.cwrap(bs,null,["number","number","number","number","number"])}function OX(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=n.makeOutput([...a.shape,s],"int32"),c=n.dataIdMap.get(l.dataId).id,u=n.dataIdMap.get(a.dataId).id;return vb(u,s,i,o,c),l}var zX={kernelName:bs,backendName:"wasm",setupFunc:DX,kernelFunc:OX};function PX(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var LX={kernelName:wo,backendName:"wasm",kernelFunc:PX};function WX(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(t.length===1)return WA({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach(l=>{k.assertShapesMatch(s,l.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=t.map(l=>WA({inputs:{input:l},backend:n,attrs:{dim:a}}));return nb({inputs:o,backend:n,attrs:{axis:a}})}var BX={kernelName:_o,backendName:"wasm",kernelFunc:WX},kb;function VX(e){kb=e.wasm.cwrap(vs,null,["number","array","number","number","array","array","number","number"])}function UX(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:a}}=e,s=r.map((f,m)=>f[0]+t.shape[m]+f[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,c=new Uint8Array(new Int32Array(t.shape).buffer),u=r.map(f=>f[0]),h=r.map(f=>f[1]),d=new Uint8Array(new Int32Array(u).buffer),p=new Uint8Array(new Int32Array(h).buffer);return kb(i,c,t.shape.length,Cn[t.dtype],d,p,a,l),o}var HX={kernelName:vs,backendName:"wasm",kernelFunc:UX,setupFunc:VX},jX=!1,GX=un(ks,jX),Ib;function qX(e){Ib=e.wasm.cwrap(Is,null,["number","number","number"])}function XX(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,o=n.makeOutput(r.shape,"float32"),l=n.dataIdMap.get(o.dataId).id;return Ib(s,i,l),o}var KX={kernelName:Is,backendName:"wasm",setupFunc:qX,kernelFunc:XX},Nb;function ZX(e){Nb=e.wasm.cwrap(bo,null,["number","number","number","number"])}function JX(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=kl(i,a,t),f=h;if(p){let b=t.dataIdMap.get(u.dataId).id;b!==o&&(c=u,l=b,f=C.getInnerMostAxes(f.length,c.shape.length))}C.assertAxesAreInnerMostDims("prod",f,c.shape.length);let[m,A]=C.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let b=t.dataIdMap.get(g.dataId).id;Nb(l,y,Cn[g.dtype],b)}if(p&&t.disposeData(u.dataId),s){let b=C.expandShapeToKeepDim(g.shape,d);g.shape=b}return g}var YX={kernelName:bo,backendName:"wasm",setupFunc:ZX,kernelFunc:JX},QX=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=uA(r,a,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},eK={kernelName:mu,backendName:"wasm",kernelFunc:QX},tK=!0,nK=un(is,tK),rK=An(Ns),aK=An(Ts),Sb;function sK(e){Sb=e.wasm.cwrap(Ss,null,["number","number","number","number","number","number","number","number","number","number"])}function iK(e){let{backend:t,inputs:n,attrs:r}=e,{images:a}=n,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,c]=o,[u,h,d,p]=a.shape,f=[u,l,c,p],m=t.dataIdMap.get(a.dataId),A;m.dtype!=="float32"&&(A=yp({backend:t,inputs:{x:a},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(A.dataId));let y=m.id,g=t.makeOutput(f,"float32");if(k.sizeFromShape(a.shape)===0)return g;let b=t.dataIdMap.get(g.dataId).id;return Sb(y,u,h,d,p,l,c,s?1:0,i?1:0,b),A!=null&&t.disposeData(A.dataId),g}var oK={kernelName:Ss,backendName:"wasm",setupFunc:sK,kernelFunc:iK},Tb;function lK(e){Tb=e.wasm.cwrap(Es,null,["number","array","number","array","number","number"])}function uK(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=k.parseAxisParam(s,a.shape);if(a.shape.length===0)return mp({inputs:{x:a},backend:n});let o=n.makeOutput(a.shape,a.dtype),l=n.dataIdMap.get(a.dataId).id,c=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(i).buffer),h=new Uint8Array(new Int32Array(a.shape).buffer);Tb(l,u,i.length,h,a.shape.length,c);let d=Ar({inputs:{x:o},attrs:{shape:a.shape},backend:n});return n.disposeData(o.dataId),d}var cK={kernelName:Es,backendName:"wasm",kernelFunc:uK,setupFunc:lK},Eb;function hK(e){Eb=e.wasm.cwrap(Po,null,["number","number","number","number","number","number","number","number","array","number","number"])}function dK(e){let{inputs:t,backend:n,attrs:r}=e,{image:a}=t,{radians:s,fillValue:i,center:o}=r,l=n.makeOutput(a.shape,a.dtype),c=n.dataIdMap.get(a.dataId).id,u=n.dataIdMap.get(l.dataId).id,[h,d,p,f]=a.shape,[m,A]=C.getImageCenter(o,d,p),y=i===0,g=255,b=typeof i=="number"?[i,i,i,y?0:g]:[...i,g],x=new Uint8Array(new Int32Array(b).buffer);return Eb(c,h,d,p,f,s,m,A,x,b.length,u),l}var pK={kernelName:Po,backendName:"wasm",kernelFunc:dK,setupFunc:hK},fK=An(Cs),mK=An(Rs),Cb;function AK(e){Cb=e.wasm.cwrap(Io,null,["number","number","number","number","number","number","array","number","number"])}function yK(e){let{backend:t,inputs:n,attrs:r}=e,{indices:a,updates:s}=n,{shape:i}=r,o=t.makeOutput(i,s.dtype);if(k.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:c,sliceSize:u,strides:h,outputSize:d}=Ff.calculateShapes(s,a,i),p=t.dataIdMap.get(a.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(h).buffer),A=t.dataIdMap.get(o.dataId).id;return Cb(p,f,Cn[s.dtype],l,c,u,m,d,A),o}var gK={kernelName:Io,backendName:"wasm",setupFunc:AK,kernelFunc:yK},Rb;function xK(e){Rb=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function wK(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(a.dataId).id,l=n.dataIdMap.get(s.dataId).id,c=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(c.dataId).id,h=r.shape.length,d=a.shape.length,p=h===0||h>1||d===1?1:k.sizeFromShape(a.shape.slice(1));return Rb(i,o,l,p,u),c}var _K={kernelName:No,backendName:"wasm",kernelFunc:wK,setupFunc:xK},Fb;function bK(e){Fb=e.wasm.cwrap(Ms,null,["number","number"])}function vK(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(a.dataId).id;return k.sizeFromShape(a.shape)===0||Fb(r,s),a}var kK={kernelName:"Sigmoid",backendName:"wasm",setupFunc:bK,kernelFunc:vK},IK=An(Fs);function gp(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:a}=e,[s,i]=rn.parseSliceParams(t,n,r),o=rn.isSliceContinous(t.shape,s,i),l=a.readSync(t.dataId),c=a.makeOutput(i,t.dtype),u=k.computeStrides(t.shape),h=a.dataIdMap.get(c.dataId);if(o){let f=rn.computeFlatOffset(s,u);return t.dtype==="string"?h.stringBytes=l.slice(f,f+k.sizeFromShape(i)):a.typedArrayFromHeap(c).set(l.subarray(f,f+k.sizeFromShape(i))),c}if(t.dtype==="string"){let f=Kd(l,s,i,t.shape,t.dtype);return h.stringBytes=f,c}let d=a.typedArrayFromHeap(c),p=t.shape.length;if(p===2)NK(l,u[0],d,s,i);else if(p===3)SK(l,u[0],u[1],d,s,i);else if(p===4)TK(l,u[0],u[1],u[2],d,s,i);else{let f=Kd(l,s,i,t.shape,t.dtype);d.set(f)}return c}function NK(e,t,n,r,a){let s=0,i=r[0],o=r[1],l=i+a[0];for(let c=i;c<l;c++){let u=c*t+o;n.set(e.subarray(u,u+a[1]),s),s+=a[1]}}function SK(e,t,n,r,a,s){let i=0,o=a[0],l=a[1],c=a[2],u=o+s[0],h=l+s[1];for(let d=o;d<u;d++)for(let p=l;p<h;p++){let f=d*t+p*n+c;r.set(e.subarray(f,f+s[2]),i),i+=s[2]}}function TK(e,t,n,r,a,s,i){let o=0,l=s[0],c=s[1],u=s[2],h=l+i[0],d=c+i[1],p=u+i[2],f=s[3];for(let m=l;m<h;m++)for(let A=c;A<d;A++)for(let y=u;y<p;y++){let g=m*t+A*n+y*r+f;a.set(e.subarray(g,g+i[3]),o),o+=i[3]}}var EK={kernelName:To,backendName:"wasm",kernelFunc:gp},Mb;function CK(e){Mb=e.wasm.cwrap(Os,null,["number","number","number","number"])}function RK(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,a=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[r],l=k.sizeFromShape(n.shape)/o;return k.sizeFromShape(s.shape)===0||Mb(a,i,o,l),s}var FK={kernelName:Os,backendName:"wasm",setupFunc:CK,kernelFunc:RK};function MK(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=n,o=k.parseAxisParam(i,a.shape)[0],l=C.prepareSplitSize(a,s,o),c=new Array(a.shape.length).fill(0),u=a.shape.slice();return l.map(h=>{let d=[...u];d[o]=h;let p=gp({inputs:{x:a},attrs:{begin:c,size:d},backend:r});return c[o]+=h,p})}var $K={kernelName:Fo,backendName:"wasm",kernelFunc:MK},DK=An($s),OK=An(gu),zK=!0,PK=un(zs,zK),$b;function LK(e){$b=e.wasm.cwrap(ya,null,["number","number","number"])}function WK(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return $b(i,a,l),o}var BK={kernelName:ya,backendName:"wasm",setupFunc:LK,kernelFunc:WK},Db;function VK(e){Db=e.wasm.cwrap(Mo,null,["number","array","number","array","array","array","array","array","number","number"])}function UK(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{begin:s,end:i,strides:o}=r;o==null&&(o=new Array(s.length));let{beginMask:l,endMask:c,ellipsisMask:u,newAxisMask:h,shrinkAxisMask:d}=r,p=C.slice_util.maskToAxes(u);if(p.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(u!==0&&h!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(u!==0&&d!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");let f=a.shape.length-s.length,m=C.slice_util.maskToAxes(h),A=a.shape.slice();m.forEach(M=>{s[M]=0,i[M]=1,A.splice(M,0,1)});let y=Ar({inputs:{x:a},attrs:{shape:A},backend:t}),{begin:g,end:b,strides:x}=C.slice_util.getNormalizedAxes(y.shape,p,f,s,i,o,l,c,u);s=g,i=b,o=x;let w=C.slice_util.maskToAxes(d);w.forEach(M=>{i[M]=s[M]+1,o[M]=1});let _=C.slice_util.computeOutShape(s,i,o),N=_.filter((M,z)=>w.indexOf(z)===-1);if(o.every(M=>M===1)){let M=gp({inputs:{x:a},attrs:{begin:s,size:_},backend:t});t.disposeData(y.dataId);let z=Ar({inputs:{x:M},attrs:{shape:N},backend:t});return t.disposeData(M.dataId),z}let T=t.makeOutput(N,"float32");if(!N.some(M=>M===0)){let M=t.dataIdMap.get(y.dataId).id,z=new Uint8Array(new Int32Array(k.computeStrides(y.shape)).buffer),P=new Uint8Array(new Int32Array(s).buffer),B=new Uint8Array(new Int32Array(i).buffer),G=new Uint8Array(new Int32Array(o).buffer),V=new Uint8Array(new Int32Array(N).buffer),K=new Uint8Array(new Int32Array(k.computeStrides(N)).buffer),X=t.dataIdMap.get(T.dataId).id;Db(M,z,y.shape.length,P,B,G,V,K,N.length,X)}t.disposeData(y.dataId);let E=Ar({inputs:{x:T},attrs:{shape:N},backend:t});return t.disposeData(T.dataId),E}var HK={kernelName:Mo,backendName:"wasm",setupFunc:VK,kernelFunc:UK},jK=!0,GK=un(Ps,jK),Ob;function qK(e){Ob=e.wasm.cwrap(Ds,null,["number, number, number"])}function XK(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,c=i,{transposed:u,axes:h,originalAxes:d,inputWasTransposed:p}=kl(i,a,t),f=h;if(p){let b=t.dataIdMap.get(u.dataId).id;b!==o&&(c=u,l=b,f=C.getInnerMostAxes(f.length,c.shape.length))}C.assertAxesAreInnerMostDims("sum",f,c.shape.length);let[m,A]=C.computeOutAndReduceShapes(c.shape,f),y=k.sizeFromShape(A),g=t.makeOutput(m,c.dtype);if(k.sizeFromShape(c.shape)!==0){let b=t.dataIdMap.get(g.dataId).id;Ob(l,y,b)}if(p&&t.disposeData(u.dataId),s){let b=C.expandShapeToKeepDim(g.shape,d);g.shape=b}return g}var KK={kernelName:Ds,backendName:"wasm",setupFunc:qK,kernelFunc:XK},ZK=An(Ls),zb;function JK(e){zb=e.wasm.cwrap(Aa,null,["number","array","number","array","number","number"])}function YK(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,s=n.dataIdMap.get(a.dataId).id,{reps:i}=r,o=new Array(a.shape.length);for(let d=0;d<o.length;d++)o[d]=a.shape[d]*i[d];let l=new Uint8Array(new Int32Array(a.shape).buffer),c=new Uint8Array(new Int32Array(o).buffer),u=n.makeOutput(o,a.dtype),h=n.dataIdMap.get(u.dataId).id;return zb(s,l,a.shape.length,c,o.length,Cn[u.dtype],h),u}var QK={kernelName:Aa,backendName:"wasm",setupFunc:JK,kernelFunc:YK},Pb;function eZ(e){Pb=e.wasm.cwrap(Do,null,["number","array","number","number","number","bool","number","number"])}var tZ=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{k:a,sorted:s}=n,i=t.dataIdMap.get(r.dataId).id,o=new Uint8Array(new Int32Array(r.shape).buffer),l=r.shape.slice();l[l.length-1]=a;let c=t.makeOutput(l,r.dtype),u=t.dataIdMap.get(c.dataId).id,h=t.makeOutput(l,"int32"),d=t.dataIdMap.get(h.dataId).id;return Pb(i,o,r.shape.length,Cn[r.dtype],a,s,u,d),[c,h]},nZ={kernelName:Do,backendName:"wasm",setupFunc:eZ,kernelFunc:tZ};function rZ(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape[s],o=a.shape.length,l=new Array(o-1),c=0;for(let p=0;p<o;p++)p!==s&&(l[c++]=a.shape[p]);let u=new Array(i),h=new Array(o).fill(0),d=a.shape.slice();d[s]=1;for(let p=0;p<u.length;p++)h[s]=p,u[p]=gp({inputs:{x:a},attrs:{begin:h,size:d},backend:n});return u.map(({dataId:p,dtype:f})=>({dataId:p,dtype:f,shape:l}))}var aZ={kernelName:Oo,backendName:"wasm",kernelFunc:rZ};function sZ(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var iZ={kernelName:zo,backendName:"wasm",kernelFunc:sZ},oZ=[NG,TG,RG,LG,VG,GG,qG,XG,JG,YG,tq,aq,sq,lq,hq,fq,yq,xq,wq,_q,vq,Nq,Sq,Eq,IG,Fq,Dq,Pq,Bq,Hq,Gq,Xq,FG,Jq,Qq,tX,nX,aX,oX,uX,dX,mX,gX,wX,bX,vX,NX,EX,FX,$X,zX,LX,BX,HX,GX,KX,YX,eK,nK,rK,aK,UG,oK,cK,pK,mK,fK,gK,_K,kK,IK,EK,FK,$K,DK,OK,PK,BK,HK,GK,KK,ZK,QK,nZ,OG,aZ,iZ];for(let e of oZ)Lo(e);var VA=Q();VA.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));VA.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(VA.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var Lb=Qo(_k()),lZ='var threadInfoStruct=0;var selfThreadId=0;var parentThreadId=0;var Module={};function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:selfThreadId})}var err=threadPrintErr;this.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);Module["wasmModule"]=null;receiveInstance(instance);return instance.exports};this.onmessage=function(e){try{if(e.data.cmd==="load"){Module["DYNAMIC_BASE"]=e.data.DYNAMIC_BASE;Module["DYNAMICTOP_PTR"]=e.data.DYNAMICTOP_PTR;Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}Module=WasmBackendModuleThreadedSimd(Module);postMessage({"cmd":"loaded"})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;threadInfoStruct=e.data.threadInfoStruct;Module["__register_pthread_ptr"](threadInfoStruct,0,0);selfThreadId=e.data.selfThreadId;parentThreadId=e.data.parentThreadId;var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["_emscripten_tls_init"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].setThreadStatus(Module["_pthread_self"](),1);try{var result=Module["dynCall_ii"](e.data.start_routine,e.data.arg);if(!Module["getNoExitRuntime"]())Module["PThread"].threadExit(result)}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){Atomics.store(Module["HEAPU32"],threadInfoStruct+4>>2,ex instanceof Module["ExitStatus"]?ex.status:-2);Atomics.store(Module["HEAPU32"],threadInfoStruct+0>>2,1);Module["_emscripten_futex_wake"](threadInfoStruct+0,2147483647);if(!(ex instanceof Module["ExitStatus"]))throw ex}}}else if(e.data.cmd==="cancel"){if(threadInfoStruct){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(threadInfoStruct){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex.stack)err(ex.stack);throw ex}};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){self={location:{href:__filename}};var onmessage=this.onmessage;var nodeWorkerThreads=require("worker_threads");Worker=nodeWorkerThreads.Worker;var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");var nodeRead=function(filename){return nodeFS.readFileSync(filename,"utf8")};function globalEval(x){global.require=require;global.Module=Module;eval.call(null,x)}importScripts=function(f){globalEval(nodeRead(f))};postMessage=function(msg){parentPort.postMessage(msg)};if(typeof performance==="undefined"){performance={now:function(){return Date.now()}}}}',uZ=Qo(bk()),N0=class extends nu{constructor(e){super();this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.init(),this.dataIdMap=new mh(this,Sr())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=k.now();return e(),{kernelMs:k.now()-t}}move(e,t,n,r,a){let s=this.dataIdNextNumber++;if(r==="string"){let c=t;this.dataIdMap.set(e,{id:s,stringBytes:c,shape:n,dtype:r,memoryOffset:null,refCount:a});return}let i=k.sizeFromShape(n),o=i*k.bytesPerElement(r),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:r,refCount:a}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e){let{memoryOffset:t,dtype:n,shape:r,stringBytes:a}=this.dataIdMap.get(e);if(n==="string")return a;let s=this.wasm.HEAPU8.slice(t,t+k.sizeFromShape(r)*k.bytesPerElement(n));return cZ(s.buffer,n)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let r;if(n==null)r=this.write(null,e,t);else{let a=this.dataIdNextNumber++;r={id:a},this.dataIdMap.set(r,{id:a,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=k.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,s,n)}return{dataId:r,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:a}=this.dataIdMap.get(n),s=k.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,a,s);case"int32":return new Int32Array(r,a,s);case"bool":return new Uint8Array(r,a,s);default:throw new Error(`Unknown dtype ${t}`)}}};function hZ(e){return(t,n)=>(k.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(a=>{WebAssembly.instantiate(a,t).then(s=>{n(s.instance)})})}),{})}function Wb(e,t,n){if(xp!=null)return xp;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),mc!=null&&mc[r]!=null?mc[r]:n+r}async function dZ(){let[e,t]=await Promise.all([Q().getAsync("WASM_HAS_SIMD_SUPPORT"),Q().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let a={};a.locateFile=(l,c)=>{if(l.endsWith(".worker.js")){let u=lZ,h=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(h)}return l.endsWith(".wasm")?Wb(e,t,Ac!=null?Ac:c):c+l},UA&&(a.instantiateWasm=hZ(Wb(e,t,Ac!=null?Ac:"")));let s;t&&e&&xp==null?(s=Lb.default(a),s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Lb.default.toString()],{type:"text/javascript"})):s=uZ.default(a);let i=null;s.tfjs={init:s.cwrap("init",null,[]),registerTensor:s.cwrap("register_tensor",null,["number","number","number"]),disposeData:s.cwrap("dispose_data",i,["number"]),dispose:s.cwrap("dispose",i,[])};let o=!1;s.onRuntimeInitialized=()=>{o=!0,yc=!1,n({wasm:s})},s.onAbort=()=>{o||yc||(yc=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))}})}function cZ(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var pZ=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],xp=null,Ac=null,mc={},yc=!1,UA=!1;function P8(e,t=!1){if(Mf("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),yc)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");xp=e,UA=t}function L8(e,t=!1){if(yc)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Ac=e;else{mc=e;let n=pZ.filter(r=>mc[r]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}UA=t}var S0="3.1.0",fZ=2;vu("wasm",async()=>{let{wasm:e}=await dZ();return new N0(e)},fZ);Z().prototype.abs=function(){return this.throwIfDisposed(),$t(this)};Z().prototype.acos=function(){return this.throwIfDisposed(),$f(this)};Z().prototype.acosh=function(){return this.throwIfDisposed(),Df(this)};Z().prototype.add=function(e){return this.throwIfDisposed(),oe(this,e)};Z().prototype.all=function(e,t){return this.throwIfDisposed(),Qh(this,e,t)};Z().prototype.any=function(e,t){return this.throwIfDisposed(),ku(this,e,t)};Z().prototype.argMax=function(e){return this.throwIfDisposed(),Iu(this,e)};Z().prototype.argMin=function(e){return this.throwIfDisposed(),Of(this,e)};Z().prototype.asScalar=function(){return this.throwIfDisposed(),F(this.size===1,()=>"The array must have only 1 element."),q(this,[])};Z().prototype.asType=function(e){return this.throwIfDisposed(),ye(this,e)};Z().prototype.as1D=function(){return this.throwIfDisposed(),q(this,[this.size])};Z().prototype.as2D=function(e,t){return this.throwIfDisposed(),q(this,[e,t])};Z().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),q(this,[e,t,n])};Z().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),q(this,[e,t,n,r])};Z().prototype.as5D=function(e,t,n,r,a){return this.throwIfDisposed(),q(this,[e,t,n,r,a])};Z().prototype.asin=function(){return this.throwIfDisposed(),zf(this)};Z().prototype.asinh=function(){return this.throwIfDisposed(),Pf(this)};Z().prototype.atan=function(){return this.throwIfDisposed(),Lf(this)};Z().prototype.atan2=function(e){return this.throwIfDisposed(),Wf(this,e)};Z().prototype.atanh=function(){return this.throwIfDisposed(),Bf(this)};Z().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),Nu(this,e,t,n,r)};Z().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Su(this,e,t)};Z().prototype.batchNorm=function(e,t,n,r,a){return this.throwIfDisposed(),Hs(this,e,t,n,r,a)};Z().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Tu(this,e)};Z().prototype.cast=function(e){return this.throwIfDisposed(),ye(this,e)};Z().prototype.ceil=function(){return this.throwIfDisposed(),Uf(this)};Z().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),pn(this,e,t)};Z().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof et&&(e=[e]),ct([this,...e],t)};Z().prototype.conv1d=function(e,t,n,r,a,s){return this.throwIfDisposed(),td(this,e,t,n,r,a,s)};Z().prototype.conv2dTranspose=function(e,t,n,r,a){return this.throwIfDisposed(),nd(this,e,t,n,r,a)};Z().prototype.conv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Kr(this,e,t,n,r,a,s)};Z().prototype.cos=function(){return this.throwIfDisposed(),Eu(this)};Z().prototype.cosh=function(){return this.throwIfDisposed(),rd(this)};Z().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),ad(this,e,t,n)};Z().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),jf(this,e,t)};Z().prototype.depthwiseConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Uo(this,e,t,n,r,a,s)};Z().prototype.dilation2d=function(e,t,n,r,a){return this.throwIfDisposed(),Gf(this,e,t,n,r,a)};Z().prototype.divNoNan=function(e){return this.throwIfDisposed(),qf(this,e)};Z().prototype.div=function(e){return this.throwIfDisposed(),Ne(this,e)};Z().prototype.dot=function(e){return this.throwIfDisposed(),n0(this,e)};Z().prototype.elu=function(){return this.throwIfDisposed(),Ho(this)};Z().prototype.equal=function(e){return this.throwIfDisposed(),xa(this,e)};Z().prototype.erf=function(){return this.throwIfDisposed(),Xf(this)};Z().prototype.exp=function(){return this.throwIfDisposed(),Pn(this)};Z().prototype.expandDims=function(e){return this.throwIfDisposed(),vn(this,e)};Z().prototype.expm1=function(){return this.throwIfDisposed(),Kf(this)};Z().prototype.fft=function(){return this.throwIfDisposed(),Lu(this)};Z().prototype.flatten=function(){return this.throwIfDisposed(),q(this,[this.size])};Z().prototype.floor=function(){return this.throwIfDisposed(),jo(this)};Z().prototype.floorDiv=function(e){return this.throwIfDisposed(),Jh(this,e)};Z().prototype.gather=function(e,t){return this.throwIfDisposed(),js(this,e,t)};Z().prototype.greaterEqual=function(e){return this.throwIfDisposed(),_a(this,e)};Z().prototype.greater=function(e){return this.throwIfDisposed(),Qn(this,e)};Z().prototype.ifft=function(){return this.throwIfDisposed(),Zo(this)};Z().prototype.irfft=function(){return this.throwIfDisposed(),wd(this)};Z().prototype.isFinite=function(){return this.throwIfDisposed(),r0(this)};Z().prototype.isInf=function(){return this.throwIfDisposed(),a0(this)};Z().prototype.isNaN=function(){return this.throwIfDisposed(),s0(this)};Z().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Ru(this,e)};Z().prototype.lessEqual=function(e){return this.throwIfDisposed(),Gs(this,e)};Z().prototype.less=function(e){return this.throwIfDisposed(),id(this,e)};Z().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),Jf(this,e,t,n,r)};Z().prototype.logSigmoid=function(){return this.throwIfDisposed(),l0(this)};Z().prototype.logSoftmax=function(e){return this.throwIfDisposed(),ld(this,e)};Z().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),Yf(this,e,t)};Z().prototype.log=function(){return this.throwIfDisposed(),kn(this)};Z().prototype.log1p=function(){return this.throwIfDisposed(),od(this)};Z().prototype.logicalAnd=function(e){return this.throwIfDisposed(),er(this,e)};Z().prototype.logicalNot=function(){return this.throwIfDisposed(),Fu(this)};Z().prototype.logicalOr=function(e){return this.throwIfDisposed(),ud(this,e)};Z().prototype.logicalXor=function(e){return this.throwIfDisposed(),u0(this,e)};Z().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),qe(this,e,t,n)};Z().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),Mu(this,e,t,n,r)};Z().prototype.max=function(e,t){return this.throwIfDisposed(),Ln(this,e,t)};Z().prototype.maximum=function(e){return this.throwIfDisposed(),Er(this,e)};Z().prototype.mean=function(e,t){return this.throwIfDisposed(),bt(this,e,t)};Z().prototype.min=function(e,t){return this.throwIfDisposed(),qo(this,e,t)};Z().prototype.minimum=function(e){return this.throwIfDisposed(),Xo(this,e)};Z().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),em(this,e,t)};Z().prototype.mod=function(e){return this.throwIfDisposed(),tm(this,e)};Z().prototype.mul=function(e){return this.throwIfDisposed(),L(this,e)};Z().prototype.neg=function(){return this.throwIfDisposed(),_t(this)};Z().prototype.norm=function(e,t,n){return this.throwIfDisposed(),kd(this,e,t,n)};Z().prototype.notEqual=function(e){return this.throwIfDisposed(),qs(this,e)};Z().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),Wo(this,e,t,n)};Z().prototype.onesLike=function(){return this.throwIfDisposed(),In(this)};Z().prototype.pad=function(e,t){return this.throwIfDisposed(),Zr(this,e,t)};Z().prototype.pool=function(e,t,n,r,a){return this.throwIfDisposed(),d0(this,e,t,n,r,a)};Z().prototype.pow=function(e){return this.throwIfDisposed(),Jr(this,e)};Z().prototype.prelu=function(e){return this.throwIfDisposed(),Du(this,e)};Z().prototype.prod=function(e,t){return this.throwIfDisposed(),hd(this,e,t)};Z().prototype.reciprocal=function(){return this.throwIfDisposed(),nm(this)};Z().prototype.relu=function(){return this.throwIfDisposed(),Rr(this)};Z().prototype.relu6=function(){return this.throwIfDisposed(),pd(this)};Z().prototype.reshapeAs=function(e){return this.throwIfDisposed(),q(this,e.shape)};Z().prototype.reshape=function(e){return this.throwIfDisposed(),q(this,e)};Z().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),ax(this,e,t,n)};Z().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),sx(this,e,t,n)};Z().prototype.reverse=function(e){return this.throwIfDisposed(),Nn(this,e)};Z().prototype.rfft=function(){return this.throwIfDisposed(),Wu(this)};Z().prototype.round=function(){return this.throwIfDisposed(),rm(this)};Z().prototype.rsqrt=function(){return this.throwIfDisposed(),fd(this)};Z().prototype.selu=function(){return this.throwIfDisposed(),md(this)};Z().prototype.separableConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),am(this,e,t,n,r,a,s)};Z().prototype.sigmoid=function(){return this.throwIfDisposed(),Yn(this)};Z().prototype.sign=function(){return this.throwIfDisposed(),sm(this)};Z().prototype.sin=function(){return this.throwIfDisposed(),Ad(this)};Z().prototype.sinh=function(){return this.throwIfDisposed(),yd(this)};Z().prototype.slice=function(e,t){return this.throwIfDisposed(),Me(this,e,t)};Z().prototype.softmax=function(e){return this.throwIfDisposed(),Pu(this,e)};Z().prototype.softplus=function(){return this.throwIfDisposed(),Go(this)};Z().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),$u(this,e,t)};Z().prototype.split=function(e,t){return this.throwIfDisposed(),an(this,e,t)};Z().prototype.sqrt=function(){return this.throwIfDisposed(),Xt(this)};Z().prototype.square=function(){return this.throwIfDisposed(),ot(this)};Z().prototype.squaredDifference=function(e){return this.throwIfDisposed(),_d(this,e)};Z().prototype.squeeze=function(e){return this.throwIfDisposed(),ba(this,e)};Z().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof et?[this,e]:[this,...e];return Sn(n,t)};Z().prototype.step=function(e){return this.throwIfDisposed(),Jo(this,e)};Z().prototype.stridedSlice=function(e,t,n,r,a,s,i,o){return this.throwIfDisposed(),om(this,e,t,n,r,a,s,i,o)};Z().prototype.sub=function(e){return this.throwIfDisposed(),we(this,e)};Z().prototype.sum=function(e,t){return this.throwIfDisposed(),Te(this,e,t)};Z().prototype.tan=function(){return this.throwIfDisposed(),lm(this)};Z().prototype.tanh=function(){return this.throwIfDisposed(),Vo(this)};Z().prototype.tile=function(e){return this.throwIfDisposed(),wa(this,e)};Z().prototype.toBool=function(){return this.throwIfDisposed(),ye(this,"bool")};Z().prototype.toFloat=function(){return this.throwIfDisposed(),ye(this,"float32")};Z().prototype.toInt=function(){return this.throwIfDisposed(),ye(this,"int32")};Z().prototype.topk=function(e,t){return this.throwIfDisposed(),um(this,e,t)};Z().prototype.transpose=function(e){return this.throwIfDisposed(),at(this,e)};Z().prototype.unique=function(e){return this.throwIfDisposed(),vd(this,e)};Z().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),cm(this,e,t)};Z().prototype.unstack=function(e){return this.throwIfDisposed(),tr(this,e)};Z().prototype.where=function(e,t){return this.throwIfDisposed(),fn(e,this,t)};Z().prototype.zerosLike=function(){return this.throwIfDisposed(),He(this)};var Bb={kernelName:Li,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,Jo(ye(n,"float32"),-1))}}},mZ={kernelName:Wi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=ot(ye(n,"float32")),a=Xt(we(Se(1),r));return _t(Ne(e,a))}}}},AZ={kernelName:Bi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Xt(we(ot(ye(n,"float32")),1));return Ne(e,r)}}}},yZ={kernelName:fa,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=e,i=Ot(n.shape,a);return i.length>0&&(s=Te(s,i)),q(s,n.shape)},b:()=>{let s=e,i=Ot(r.shape,a);return i.length>0&&(s=Te(s,i)),q(s,r.shape)}}}},gZ={kernelName:Ka,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,a)=>{n[a]=()=>e.clone()}),n}},xZ={kernelName:Za,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>He(n)}}},wZ={kernelName:ru,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>He(n)}}},_Z={kernelName:Vi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,Xt(we(Se(1),ot(ye(n,"float32")))))}}},bZ={kernelName:Ui,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Xt(oe(Se(1),ot(ye(n,"float32"))));return Ne(e,r)}}}},vZ={kernelName:Gi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=oe(ot(n),ot(r)),i=L(e,Ne(r,s)),o=Ot(n.shape,a);return o.length>0&&(i=Te(i,o)),q(i,n.shape)},b:()=>{let s=oe(ot(n),ot(r)),i=_t(L(e,Ne(n,s))),o=Ot(r.shape,a);return o.length>0&&(i=Te(i,o)),q(i,r.shape)}}}},kZ={kernelName:Hi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,oe(ot(ye(n,"float32")),1))}}},IZ={kernelName:ji,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,we(Se(1),ot(ye(n,"float32"))))}}};function NZ(e,t,n,r,a,s){let i=R(e,"dy","avgPool3dGrad"),o=R(t,"input","avgPool3dGrad"),l=i,c=o,u=!1;o.rank===4&&(u=!0,l=q(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),c=q(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),F(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),F(c.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${c.rank}.`),s!=null&&F(Ut(a),()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${s} but got pad ${a}.`);let h={dy:l,input:c},d={filterSize:n,strides:r,pad:a,dimRoundingMode:s},p=D.runKernel(xh,h,d);return u?q(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var SZ=O({avgPool3dGrad_:NZ}),TZ={kernelName:au,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>SZ(e,r,a,s,i,o)}}};function EZ(e,t,n,r,a){let s=R(e,"dy","avgPoolGrad"),i=R(t,"input","avgPoolGrad");F(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let o=i,l=s,c=!1;i.rank===3&&(c=!0,o=q(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=q(s,[1,s.shape[0],s.shape[1],s.shape[2]])),F(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),F(o.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`);let u={dy:l,input:o},h={filterSize:n,strides:r,pad:a},d=D.runKernel(gh,u,h);return c?q(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var CZ=O({avgPoolGrad_:EZ}),RZ={kernelName:Ja,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i}=n;return{x:()=>CZ(e,r,a,s,i)}}},FZ={kernelName:Ya,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,a]=t,{transposeA:s,transposeB:i}=n;return!s&&!i?{a:()=>qe(e,a,!1,!0),b:()=>qe(r,e,!0,!1)}:!s&&i?{a:()=>qe(e,a,!1,!1),b:()=>qe(e,r,!0,!1)}:s&&!i?{a:()=>qe(a,e,!1,!0),b:()=>qe(r,e,!1,!1)}:{a:()=>qe(a,e,!0,!0),b:()=>qe(e,r,!0,!0)}}},MZ={kernelName:su,gradFunc:(e,t,n)=>{let{blockShape:r,crops:a}=n;return{x:()=>$u(e,r,a)}}},$Z={kernelName:L2,gradFunc:(e,t,n)=>{let r=n,a=r.inputShape,s=r.shape,i=Array.from(s);for(let l=a.length-1;l>=0;l--)if(a[l]===s[l])i[l]=1;else if(a[l]!==1)throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${s}].`);let o=[];for(let l=0;l<i.length;l++)i[l]>1&&o.push(l);return{x:()=>Te(e,o,!0)}}},DZ={kernelName:Qa,gradFunc:e=>({x:()=>e.clone()})},OZ={kernelName:es,gradFunc:e=>({x:()=>He(e)})},zZ={kernelName:ma,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:a,clipValueMax:s}=n;return{x:()=>fn(er(_a(r,a),Gs(r,s)),e,He(e))}}},PZ={kernelName:iu,inputsToSave:["x"],gradFunc:Bb.gradFunc},LZ={kernelName:qi,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(o=>o.shape),{axis:a}=n,s=rr(a,t[0].shape)[0],i=r.map(o=>o[s]);return an(e,i,s).map(o=>()=>o)}},WZ={kernelName:ts,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return F(Ea(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Jm(r.shape,e,a,i,o,l),filter:()=>nA(r,e,a.shape,i,o,l)}}},BZ={kernelName:ns,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Kr(e,a,s,i,o,1,l),filter:()=>nA(e,r,a.shape,s,i,o,l)}}};function VZ(e,t,n,r,a){let s=e;e.rank===4&&(s=q(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=q(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),F(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),F(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),F(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),F(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),F(i.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`);let o={x:s,dy:i},l={strides:r,pad:a,filterShape:n};return D.runKernel(vh,o,l)}var UZ=O({conv3DBackpropFilter_:VZ}),HZ={kernelName:ou,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s}=n;F(Ea(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[i,o]=t;return{x:()=>H5(i.shape,e,o,a,s),filter:()=>UZ(i,e,o.shape,a,s)}}},jZ={kernelName:rs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(_t(Ad(ye(n,"float32"))),e)}}},GZ={kernelName:Xi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(yd(ye(n,"float32")),e)}}},qZ={kernelName:as,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a,exclusive:s,reverse:i}=n;return{x:()=>{let o=q5([a],r.rank),l=ad(e,a,s,!i);return o!=null&&(l=at(l,o)),l}}}},XZ={kernelName:ss,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s,dimRoundingMode:i}=n,o=r==null?[1,1]:r;F(Ea(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,c]=t;return F(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),F(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${c.rank}.`),F(l.shape[3]===c.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),F(zr(a,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${o}'.`),i!=null&&F(Ut(s),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`),{x:()=>J5(l.shape,e,c,a,s,r,i),filter:()=>Z5(l,e,c.shape,a,s,r,i)}}},KZ={kernelName:lu,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,s={x:r,filter:a,dy:e},i={x:r,filter:a,dy:e};return{x:()=>D.runKernel(Eh,s,n),filter:()=>D.runKernel(Ch,i,n)}}},ZZ={kernelName:Ji,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>D.runKernel(Rh,r)}}},JZ={kernelName:Yi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=L(Pn(_t(ot(n))),2/Math.sqrt(Math.PI));return{x:()=>L(e,r)}}},YZ={kernelName:os,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,n)}}},QZ={kernelName:eo,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>q(e,n.shape)}}},eJ={kernelName:to,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,Pn(n))}}},tJ={kernelName:ls,gradFunc:e=>({x:()=>He(e)})},nJ={kernelName:us,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=Ne(e,ye(r,"float32")),i=Ot(n.shape,a);return i.length>0?q(Te(s,i),n.shape):s},b:()=>{let s=L(e,ye(n,"float32")),i=Ot(r.shape,a);i.length>0&&(s=q(Te(s,i),r.shape));let o=ot(r);return _t(Ne(s,ye(o,"float32")))}}}},rJ={kernelName:cs,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[a,s,i,o]=t,l=o==null?Se(1):o,c=Ot(s.shape,a.shape),u=[];if(s.rank===1){for(let m=0;m<a.shape.length-1;++m)u.push(a.shape[m]);u.push(1)}let h=we(a,s),d=L(e,l),p=fd(oe(i,Se(r))),f=L(L(L(p,p),p),Se(-.5));return{x:()=>s.rank===1?q(L(L(e,wa(q(p,[1,1,1,s.shape[0]]),u)),l),a.shape):q(L(L(e,p),l),a.shape),mean:()=>{let m=L(L(p,Se(-1)),d);return s.rank===1&&(m=Te(m,c)),q(m,s.shape)},variance:()=>{let m=L(L(f,h),d);return s.rank===1&&(m=Te(m,c)),q(m,s.shape)},scale:()=>{let m=L(h,p),A=L(e,m);return s.rank===1&&(A=Te(A,c)),q(A,s.shape)},offset:()=>{let m=e;return s.rank===1&&(m=Te(m,c)),q(m,s.shape)}}}},aJ={kernelName:ro,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,a]=t,{axis:s}=n,i=rr(s,r.shape)[0];return{x:()=>{let o=r.shape,l=a.size,c=o.slice(0,i),u=c.length,h=o.slice(s,o.length).slice(1),d=h.length,p=Vb(0,u),f=Vb(u+1,u+1+d),m=Ub([c,[l],h]),A=q(e,m),y=q(a,[l]),g=Ub([[u],p,f]),b=at(A,g),x=cm(b,y,r.shape[i]),w=Qm(g);return x=at(x,w),x},indices:()=>a}}};function Vb(e,t){let n=[];for(let r=e;r<t;++r)n.push(r);return n}function Ub(e){let t=[];for(let n=0;n<e.length;++n)for(let r=0;r<e[n].length;++r)t.push(e[n][r]);return t}var sJ={kernelName:hs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>He(n),b:()=>He(r)}}},iJ={kernelName:ds,gradFunc:e=>({x:()=>ye(e,"float32")})},oJ={kernelName:io,gradFunc:e=>({x:()=>He(e)})},lJ={kernelName:oo,gradFunc:e=>({x:()=>He(e)})},uJ={kernelName:lo,gradFunc:e=>({x:()=>He(e)})},cJ={kernelName:ps,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:a}=n,s=Qn(r,0);return{x:()=>fn(s,e,L(e,a))}}},hJ={kernelName:ho,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,oe(n,1))}}},dJ={kernelName:fs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,ye(n,"float32"))}}},pJ={kernelName:W2,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n;return{logits:()=>{let s=!0,i=Pn(r);return we(e,L(Te(e,a,s),i))}}}};function fJ(e,t,n,r=5,a=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:r,bias:a,alpha:s,beta:i};return D.runKernel(Oh,o,l)}var mJ=O({localResponseNormalizationBackprop_:fJ}),AJ={kernelName:du,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>mJ(r,a,e,s,i,o,l)}}};function Hb(e,t,n,r){return t.rank<n.rank&&(t=q(t,ni(t.shape,r))),e.rank<n.rank&&(e=q(e,ni(e.shape,r))),{x:()=>L(e,ye(xa(n,t),e.dtype))}}var jb={kernelName:ms,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:a}=r,s=t[0],i=t[1],o=rr(a,s.shape),l=Hb(e,i,s,o);return{x:()=>l.x()}}},yJ={kernelName:As,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>L(e,ye(_a(n,r),"float32")),b:()=>L(e,ye(id(n,r),"float32"))}}};function gJ(e,t,n,r,a,s,i){let o=R(e,"dy","maxPool3dGrad"),l=R(t,"input","maxPool3dGrad"),c=R(n,"output","maxPool3dGrad"),u=o,h=l,d=c,p=!1;l.rank===4&&(p=!0,u=q(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),h=q(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),d=q(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]])),F(u.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${u.rank}.`),F(h.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${h.rank}.`),F(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),i!=null&&F(Ut(s),()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let f={dy:u,input:h,output:d},m={filterSize:r,strides:a,pad:s,dimRoundingMode:i},A=D.runKernel(Ph,f,m);return p?q(A,[A.shape[1],A.shape[2],A.shape[3],A.shape[4]]):A}var xJ=O({maxPool3dGrad_:gJ}),wJ={kernelName:pu,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>xJ(e,r,a,s,i,o,l)}}};function _J(e,t,n,r,a,s,i){let o=R(e,"dy","maxPoolGrad"),l=R(t,"input","maxPoolGrad"),c=R(n,"output","maxPoolGrad");F(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),F(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),F(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),i!=null&&F(Ut(s),()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`);let u={dy:o,input:l,output:c},h={filterSize:r,strides:a,pad:s,dimRoundingMode:i};return D.runKernel(zh,u,h)}var bJ=O({maxPoolGrad_:_J}),vJ={kernelName:ys,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>bJ(e,r,a,s,i,o)}}},kJ={kernelName:gs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n,s=rr(a,r.shape),i=G5(r.shape,s)[1],o=Dt(i);return{x:()=>{let l=r.shape.slice();s.forEach(u=>{l[u]=1});let c=q(e,l);return Ne(L(c,Cr(r.shape,"float32")),o)}}}},IJ={kernelName:xs,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:a}=r,[s,i]=t,o=rr(a,s.shape),l=Hb(e,i,s,o);return{x:()=>l.x()}}},NJ={kernelName:ws,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>L(e,ye(Gs(n,r),"float32")),b:()=>L(e,ye(Qn(n,r),"float32"))}}},SJ={kernelName:fu,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Me(e,s,r.shape)}}},TJ={kernelName:fo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=Ot(n.shape,a);return s.length>0?q(Te(e,s),n.shape):e},b:()=>{let s=L(e,_t(jo(Ne(n,r)))),i=Ot(r.shape,a);return i.length>0?q(Te(s,i),r.shape):s}}}},EJ={kernelName:_s,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=L(e,ye(r,"float32")),i=Ot(n.shape,a);return i.length>0?q(Te(s,i),n.shape):s},b:()=>{let s=L(e,ye(n,"float32")),i=Ot(r.shape,a);return i.length>0?q(Te(s,i),r.shape):s}}}},CJ={kernelName:mo,gradFunc:e=>({x:()=>_t(e)})},RJ={kernelName:bs,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>Ct(n.shape,"float32")}}},FJ={kernelName:wo,gradFunc:e=>({x:()=>He(e)})},MJ={kernelName:_o,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return tr(e,r).map(a=>()=>a)}},Gb={kernelName:vs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map(i=>i[0]);return{x:()=>Me(e,s,r.shape)}}},$J={kernelName:ks,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,a]=t,s=n,i=r,o=At(s.shape,i.shape);return{a:()=>{let l=ye(i,"float32"),c=L(e,L(l,Jr(s,we(l,Se(1))))),u=Ot(s.shape,o);return u.length>0&&(c=Te(c,u)),q(c,s.shape)},b:()=>{let l=Qn(s,0),c=fn(l,kn(s),He(s)),u=L(e,L(a,c)),h=Ot(i.shape,o);return h.length>0&&(u=Te(u,h)),q(u,i.shape)}}}},DJ={kernelName:Is,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,a=Qn(n,0);return{x:()=>fn(a,e,L(e,r)),alpha:()=>{let s=fn(a,He(e),L(e,n)),i=Ot(r.shape,e.shape);return i.length>0&&(s=Te(s,i)),q(s,r.shape)}}}},OJ={kernelName:is,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=Ne(e,ye(r,"float32")),i=Ot(n.shape,a);return i.length>0?q(Te(s,i),n.shape):s},b:()=>{let s=L(e,ye(n,"float32")),i=Ot(r.shape,a);i.length>0&&(s=q(Te(s,i),r.shape));let o=ot(r);return _t(Ne(s,ye(o,"float32")))}}}},zJ={kernelName:vo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,_t(ot(n)))}}},PJ={kernelName:Ts,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=L(Gs(n,6),Jo(n));return{x:()=>L(e,ye(r,"float32"))}}},LJ={kernelName:Ns,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,ye(Jo(n),"float32"))}}},WJ={kernelName:ko,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>q(e,n.shape)}}},BJ={kernelName:Ss,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>D.runKernel(Uh,a,n)}}},VJ={kernelName:Au,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>D.runKernel(Vh,a,n)}}},UJ={kernelName:Es,gradFunc:(e,t,n)=>{let{dims:r}=n,a=rr(r,e.shape);return{x:()=>Nn(e,a)}}},HJ={kernelName:Cs,gradFunc:e=>({x:()=>He(e)})},jJ={kernelName:Rs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>_t(Ne(e,L(Jr(n,1.5),2)))}}},GJ={kernelName:No,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>ye(He(n),"float32"),t:()=>L(e,ye(n,e.dtype)),e:()=>L(e,ye(Fu(n),e.dtype))}}},qJ={kernelName:So,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=Qn(n,Se(0)),a=Se(ox),s=Se(lx),i=L(e,s),o=L(L(e,a),Pn(ye(n,"float32")));return fn(r,i,o)}}}},XJ={kernelName:Ms,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,L(n,we(Se(1),n)))}}},KJ={kernelName:Co,gradFunc:e=>({x:()=>He(e)})},ZJ={kernelName:Fs,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(Eu(ye(n,"float32")),e)}}},JJ={kernelName:Eo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(rd(ye(n,"float32")),e)}}},YJ={kernelName:To,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:a,size:s}=n,i=r.shape,[o,l]=D5(r,a,s),c=[];for(let u=0;u<e.rank;u++)c.push([o[u],i[u]-o[u]-l[u]]);return{x:()=>Zr(e,c)}}},QJ={kernelName:Os,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:a}=n,s=!0,i=L(e,r);return{logits:()=>we(i,L(Te(i,[a],s),r))}}},eY={kernelName:Ro,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,Yn(n))}}},qb={kernelName:yu,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:a}=n;return{x:()=>Su(e,r,a)}}},Xb={kernelName:Fo,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>ct(e,r)}}},tY={kernelName:$s,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,L(Xt(ye(n,"float32")),2))}}},nY={kernelName:gu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(e,L(ye(n,"float32"),2))}}},rY={kernelName:zs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=Se(2);return{a:()=>L(e,L(a,we(n,r))),b:()=>L(e,L(a,we(r,n)))}}},aY={kernelName:ya,gradFunc:e=>({x:()=>He(e)})},sY={kernelName:Ps,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=At(n.shape,r.shape);return{a:()=>{let s=e,i=Ot(n.shape,a);return i.length>0&&(s=Te(s,i)),q(s,n.shape)},b:()=>{let s=e,i=Ot(r.shape,a);return i.length>0&&(s=Te(s,i)),q(_t(s),r.shape)}}}},iY={kernelName:Ds,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,a=r.shape.slice(),{axis:s}=n;rr(s,r.shape).forEach(l=>{a[l]=1});let i=q(e,a),o=L(i,Cr(r.shape,"float32"));return{x:()=>o}}},oY={kernelName:$o,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ne(e,ot(Eu(n)))}}},lY={kernelName:Ls,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>L(we(Se(1),ot(n)),e)}}},uY={kernelName:Aa,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:a}=n;return{x:()=>{let s=He(r);if(r.rank===1)for(let i=0;i<a[0];++i)s=oe(s,Me(e,[i*r.shape[0]],[r.shape[0]]));else if(r.rank===2)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1]],[r.shape[0],r.shape[1]]));else if(r.rank===3)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else if(r.rank===4)for(let i=0;i<a[0];++i)for(let o=0;o<a[1];++o)for(let l=0;l<a[2];++l)for(let c=0;c<a[3];++c)s=oe(s,Me(e,[i*r.shape[0],o*r.shape[1],l*r.shape[2],c*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${r.rank} tensors yet.`);return s}}}},cY={kernelName:Ws,gradFunc:(e,t,n)=>{let r=n,{perm:a}=r,s=Qm(a);return{x:()=>at(e,s)}}},hY={kernelName:Oo,gradFunc:(e,t,n)=>{let r=n,{axis:a}=r;return{value:()=>Sn(e,a)}}},pY={kernelName:xu,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>dY(e,n)}}};function dY(e,t){let n=Er(t,He(t)),r=js(e,n),a=_a(t,Se(0,"int32")),s=r.rank-a.rank;for(let o=0;o<s;++o)a=vn(a,o+1);a=er(a,Cr(r.shape,"bool"));let i=He(r);return fn(a,r,i)}var fY={kernelName:zo,gradFunc:e=>({x:()=>He(e)})},mY=[Bb,mZ,AZ,yZ,gZ,xZ,wZ,_Z,bZ,vZ,kZ,IZ,TZ,RZ,FZ,MZ,$Z,DZ,OZ,zZ,PZ,LZ,BZ,WZ,HZ,jZ,GZ,qZ,XZ,KZ,OJ,ZZ,JZ,YZ,QZ,eJ,nJ,tJ,rJ,aJ,sJ,iJ,oJ,lJ,uJ,cJ,hJ,dJ,pJ,AJ,jb,jb,yJ,wJ,vJ,kJ,IJ,NJ,SJ,TJ,EJ,CJ,RJ,FJ,MJ,Gb,Gb,$J,DJ,zJ,PJ,LJ,WJ,BJ,VJ,UJ,HJ,jJ,GJ,qJ,XJ,KJ,ZJ,JJ,YJ,QJ,eY,qb,qb,Xb,Xb,tY,rY,nY,aY,sY,iY,oY,lY,uY,cY,hY,pY,fY];for(let e of mY)B2(e);var T0={};ze(T0,{maxNorm:()=>AY,minMaxNorm:()=>xY,nonNeg:()=>gY,unitNorm:()=>yY});var HA;function zt(){return HA==null&&(HA=q2().epsilon()),HA}function yr(){return"channelsLast"}var aa=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,aa.prototype)}},gr=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,gr.prototype)}},W=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,W.prototype)}},De=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,De.prototype)}},Kb=class extends Error{constructor(e){super(e);Object.setPrototypeOf(this,Kb.prototype)}};function di(e,t){if(Array.isArray(e)){let n=[];for(let r=0;r<t;r++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function Wr(e,t){if(!e)throw new Kb(t)}function Zb(e,t){let n=0;for(let r of e)r===t&&n++;return n}function yn(e){return e.length===1?e[0]:e}function mt(e){return Array.isArray(e)?e:[e]}function sa(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return t[0]!=="_"?t:"private"+t}function pi(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var sr={};function jA(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function GA(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>GA(t));else{let t=Object.keys(e);for(let n of t){let r=e[n];r!=null&&typeof r=="object"&&(!Array.isArray(r)&&r.type==="ndarray"&&typeof r.value=="number"?e[n]=r.value:GA(r))}}}function gc(e,t={},n={},r="object",a=!1){if(typeof e=="string"){let s=e,i;if(s in n)i=n[s];else if(s in sr)i=sr[s];else if(i=t[s],i==null)throw new W(`Unknown ${r}: ${e}. This may be due to one of the following reasons:
|
|
1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return i}else{let s=e;if(s.className==null||s.config==null)throw new W(`${r}: Improper config format: ${JSON.stringify(s)}.
|
|
'className' and 'config' must set.`);let i=s.className,o,l;if(i in n?[o,l]=n[i]:i in sr?[o,l]=sr.className:i in t&&([o,l]=t[i]),o==null)throw new W(`Unknown ${r}: ${i}. This may be due to one of the following reasons:
|
|
1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let c={};for(let p of Object.keys(sr))c[p]=sr[p];for(let p of Object.keys(n))c[p]=n[p];let u=s.config;u.customObjects=c;let h=Object.assign({},sr);for(let p of Object.keys(n))sr[p]=n[p];GA(s.config);let d=l(o,s.config,n,a);return sr=Object.assign({},h),d}else{let c=Object.assign({},sr);for(let h of Object.keys(n))sr[h]=n[h];let u=new o(s.config);return sr=Object.assign({},c),u}}}function wY(e,t){return e<t?-1:e>t?1:0}function wp(e,t){return-1*wY(e,t)}function Ma(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function _Y(e){if(e==null)throw new W(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function fi(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new W(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function qA(e,t,n=0,r=Infinity){return Wr(n>=0),Wr(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(a=>typeof a===t)}function jt(e,t){Array.isArray(e)?(k.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>jt(n,`element ${r+1} of ${t}`))):k.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${Jb(e)}.`)}function Jb(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>Jb(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function bY(e,t){let n=k.now(),r;return(...a)=>{let s=k.now();return s-n<t||(n=s,r=e(...a)),r}}function Yb(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}function XA(e,t){return U(()=>Xt(Te(L(e,e),t,!0)))}var xc=class extends re.Serializable{getConfig(){return{}}},KA=class extends xc{constructor(e){super();this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return U(()=>{let t=XA(e,this.axis),n=pn(t,0,this.maxValue);return L(e,Ne(n,oe(zt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};KA.className="MaxNorm";re.registerClass(KA);var ZA=class extends xc{constructor(e){super();this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return U(()=>Ne(e,oe(zt(),XA(e,this.axis))))}getConfig(){return{axis:this.axis}}};ZA.className="UnitNorm";re.registerClass(ZA);var JA=class extends xc{apply(e){return Rr(e)}};JA.className="NonNeg";re.registerClass(JA);var YA=class extends xc{constructor(e){super();this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=e.minValue!=null?e.minValue:this.defaultMinValue,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.rate=e.rate!=null?e.rate:this.defaultRate,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return U(()=>{let t=XA(e,this.axis),n=oe(L(this.rate,pn(t,this.minValue,this.maxValue)),L(1-this.rate,t));return L(e,Ne(n,oe(zt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};YA.className="MinMaxNorm";re.registerClass(YA);var Qb={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Pt(e){return jA(e)}function e3(e,t={}){return gc(e,re.SerializationMap.getMap().classNameMap,t,"constraint")}function Lt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in Qb?Qb[e]:e,config:{}};return e3(t)}else return e instanceof xc?e:e3(e)}function AY(e){return new KA(e)}function yY(e){return new ZA(e)}function gY(){return new JA}function xY(e){return new YA(e)}var E0={};ze(E0,{constant:()=>IY,glorotNormal:()=>FY,glorotUniform:()=>RY,heNormal:()=>MY,heUniform:()=>$Y,identity:()=>EY,leCunNormal:()=>DY,leCunUniform:()=>OY,ones:()=>kY,orthogonal:()=>zY,randomNormal:()=>SY,randomUniform:()=>NY,truncatedNormal:()=>TY,varianceScaling:()=>CY,zeros:()=>vY});var PY=["channelsFirst","channelsLast"],LY=["nearest","bilinear"],WY=["valid","same","causal"],BY=["max","avg"],VY=["sum","mul","concat","ave"],Il=new Map;function Tt(e){fi(PY,"DataFormat",e)}function UY(e){fi(LY,"InterpolationFormat",e)}function Un(e){fi(WY,"PaddingMode",e)}function t3(e){fi(BY,"PoolMode",e)}var wc=[],n3="/";function mi(e,t){wc.push(e);try{let n=t();return wc.pop(),n}catch(n){throw wc.pop(),n}}function HY(){return wc.length===0?"":wc.join(n3)+n3}function a3(e){if(!r3(e))throw new Error("Not a valid tensor name: '"+e+"'");return HY()+e}function s3(e){if(!r3(e))throw new Error("Not a valid tensor name: '"+e+"'");Il.has(e)||Il.set(e,0);let t=Il.get(e);if(Il.set(e,Il.get(e)+1),t>0){let n=`${e}_${t}`;return Il.set(n,1),n}else return e}var jY=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function r3(e){return!!e.match(jY)}function GY(e){return e===parseInt(e.toString(),10)}function $a(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let a=t;a<n;++a)r*=e[a];return r}function i3(e){return e=Array.isArray(e)?new Float32Array(e):e,Qt(e)}function Nl(e){return qo(i3(e)).dataSync()[0]}function Da(e){return Ln(i3(e)).dataSync()[0]}function xr(e,t){if(t<e)throw new W(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let r=e;r<t;++r)n.push(r);return n}function _c(e,t){return e.asType(t)}function bc(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),e.reshape(n)}function qY(e,t){return U(()=>{if(e.shape.length!==2)throw new W(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=bc(e,1);return QA(n,[1,t,1])})}function XY(e){let t=[$a(e.shape)];return e.reshape(t)}function KY(e){if(e.rank<=1)throw new W(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],$a(e.shape,1)];return e.reshape(t)}function Ai(e,t,n){return U(()=>{switch(e.rank){case 1:return gd(e,t,n);case 2:return im(e,[t,0],[n,e.shape[1]]);case 3:return xd(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return zu(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Me(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Me(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new W(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function ey(e,t,n){return U(()=>{switch(e.rank){case 1:return gd(e,t,n);case 2:return im(e,[0,t],[e.shape[0],n]);case 3:return xd(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return zu(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new W(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function _p(e,t,n,r){return U(()=>{switch(e.rank){case 1:return gd(e,t,n);case 2:switch(r){case 1:return Ai(e,t,n);case 2:return ey(e,t,n);default:throw new W(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return Ai(e,t,n);case 2:return xd(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return ey(e,t,n);default:throw new W(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return Ai(e,t,n);case 2:return zu(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return zu(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return ey(e,t,n);default:throw new W(`The axis is not within the rank of the tensor ${r}`)}default:throw new W(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function ty(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),ct(e,t)}function o3(e,t){switch(e.rank){case 1:return Y2([e,t]);case 2:return ed([e,t],0);case 3:return Q2([e,t],0);case 4:return e0([e,t],0);default:throw new W(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function QA(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new W(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return wa(e,t)}function bp(e,t=0,n=1,r,a){return p0(e,t,n,r,a)}function Br(e,t,n,r){if(e.rank<2||t.rank<2)throw new De(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let a=e.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(a!==s)throw new De(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2){let a=!1,s=!1;return va.matMul({a:e,b:t,transposeA:a,transposeB:s,bias:r?ny(e.rank,r,yr()):null,activation:n})}else{let a=e.shape.slice(),s=a.pop();e=e.reshape([-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),c=[...i,o],u=Array.from({length:t.rank},(f,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=t.transpose(u).reshape([l,-1]);let h=[...a,...c],d=!1,p=!1;return va.matMul({a:e,b:t,transposeA:d,transposeB:p,bias:r?ny(e.rank,r,yr()):null,activation:n}).reshape(h)}}function l3(e,t,n){return U(()=>(Array.isArray(t)?t=Qt(t,"int32"):t=t.toInt(),js(e,t,n)))}function vc(e){return L(e,e)}function ny(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new W(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1,1]):t.reshape([1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1,1]):t.reshape([1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,1,r[0]]):t.reshape([1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?t.reshape([1,r[0],1]):t.reshape([1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?t.reshape([1,1,r[0]]):t.reshape([1].concat(r))}else if(e<3)return t;throw new W(`Unsupported input rank by biasAdd: ${t.rank}`)}function Vr(e,t,n){return U(()=>(n==null&&(n=yr()),Tt(n),e.add(ny(e.rank,t,n))))}function ZY(e,t=1){if(t!==1)throw new De(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Ho(e)}function JY(e){return U(()=>Ne(e,$t(e).add(1)))}function u3(e,t,n,r){return U(()=>g0(e,t,n,r))}function YY(e){return U(()=>{let t=oe(.5,L(.2,e));return pn(t,0,1)})}function kc(e,t,n=!1){return n?e():t()}var QY=["fanIn","fanOut","fanAvg"],eQ=["normal","uniform","truncatedNormal"];function tQ(e){fi(QY,"FanMode",e)}function nQ(e){fi(eQ,"Distribution",e)}var ir=class extends re.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},ry=class extends ir{apply(e,t){return Ct(e,t)}};ry.className="Zeros";re.registerClass(ry);var vp=class extends ir{apply(e,t){return Cr(e,t)}};vp.className="Ones";re.registerClass(vp);var ay=class extends ir{constructor(e){super();if(typeof e!="object")throw new W(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new W(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return U(()=>L(Se(this.value),Cr(e,t)))}getConfig(){return{value:this.value}}};ay.className="Constant";re.registerClass(ay);var sy=class extends ir{constructor(e){super();this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return Ko(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};sy.className="RandomUniform";re.registerClass(sy);var iy=class extends ir{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new De(`randomNormal does not support dType ${t}.`);return bp(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};iy.className="RandomNormal";re.registerClass(iy);var oy=class extends ir{constructor(e){super();this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new De(`truncatedNormal does not support dType ${t}.`);return bd(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};oy.className="TruncatedNormal";re.registerClass(oy);var ly=class extends ir{constructor(e){super();this.gain=e.gain!=null?e.gain:1}apply(e,t){return U(()=>{if(e.length!==2||e[0]!==e[1])throw new W("Identity matrix initializer can only be used for 2D square matrices.");return L(this.gain,Zf(e[0]))})}getConfig(){return{gain:this.gain}}};ly.className="Identity";re.registerClass(ly);function rQ(e,t="channelsLast"){let n,r;if(Tt(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let a=$a(e,2);n=e[1]*a,r=e[0]*a}else if(t==="channelsLast"){let a=$a(e,0,e.length-2);n=e[e.length-2]*a,r=e[e.length-1]*a}}else{let a=$a(e);n=Math.sqrt(a),r=Math.sqrt(a)}return[n,r]}var gn=class extends ir{constructor(e){super();if(e.scale<0)throw new W(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,tQ(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,nQ(this.distribution),this.seed=e.seed}apply(e,t){let n=rQ(e),r=n[0],a=n[1],s=this.scale;if(this.mode==="fanIn"?s/=Math.max(1,r):this.mode==="fanOut"?s/=Math.max(1,a):s/=Math.max(1,(r+a)/2),this.distribution==="normal"){let i=Math.sqrt(s);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new De(`${this.getClassName()} does not support dType ${t}.`);return bd(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return Ko(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};gn.className="VarianceScaling";re.registerClass(gn);var kp=class extends gn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return gn.className}};kp.className="GlorotUniform";re.registerClass(kp);var Ip=class extends gn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return gn.className}};Ip.className="GlorotNormal";re.registerClass(Ip);var Np=class extends gn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return gn.className}};Np.className="HeNormal";re.registerClass(Np);var Sp=class extends gn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return gn.className}};Sp.className="HeUniform";re.registerClass(Sp);var Tp=class extends gn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return gn.className}};Tp.className="LeCunNormal";re.registerClass(Tp);var Ep=class extends gn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return gn.className}};Ep.className="LeCunNormal";re.registerClass(Ep);var uy=class extends ir{constructor(e){super();if(this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new De("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return U(()=>{if(e.length<2)throw new De("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,r=bp(n,0,1,"float32"),a=w0.gramSchmidt(r);return e[0]>e[1]&&(a=a.transpose()),L(this.gain,a)})}getConfig(){return{gain:this.gain,seed:this.seed}}};uy.className="Orthogonal";re.registerClass(uy);var c3={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function h3(e,t={}){return gc(e,re.SerializationMap.getMap().classNameMap,t,"initializer")}function kt(e){return jA(e)}function gt(e){if(typeof e=="string"){let t=e in c3?c3[e]:e;if(t==="GlorotNormal")return new Ip;if(t==="GlorotUniform")return new kp;if(t==="HeNormal")return new Np;if(t==="HeUniform")return new Sp;if(t==="LeCunNormal")return new Tp;if(t==="LeCunUniform")return new Ep;{let n={};return n.className=t,n.config={},h3(n)}}else return e instanceof ir?e:h3(e)}function vY(){return new ry}function kY(){return new vp}function IY(e){return new ay(e)}function NY(e){return new sy(e)}function SY(e){return new iy(e)}function TY(e){return new oy(e)}function EY(e){return new ly(e)}function CY(e){return new gn(e)}function RY(e){return new kp(e)}function FY(e){return new Ip(e)}function MY(e){return new Np(e)}function $Y(e){return new Sp(e)}function DY(e){return new Tp(e)}function OY(e){return new Ep(e)}function zY(e){return new uy(e)}var C0={};ze(C0,{Layer:()=>Xe,RNN:()=>Mr,RNNCell:()=>Ic,activation:()=>xQ,add:()=>TQ,alphaDropout:()=>hee,average:()=>EQ,averagePooling1d:()=>cy,averagePooling2d:()=>hy,averagePooling3d:()=>dy,avgPool1d:()=>PQ,avgPool2d:()=>WQ,avgPool3d:()=>VQ,avgPooling1d:()=>LQ,avgPooling2d:()=>BQ,avgPooling3d:()=>UQ,batchNormalization:()=>DQ,bidirectional:()=>ree,concatenate:()=>CQ,conv1d:()=>hQ,conv2d:()=>dQ,conv2dTranspose:()=>pQ,conv3d:()=>fQ,convLstm2d:()=>QQ,convLstm2dCell:()=>eee,cropping2D:()=>AQ,dense:()=>wQ,depthwiseConv2d:()=>gQ,dot:()=>$Q,dropout:()=>_Q,elu:()=>sQ,embedding:()=>SQ,flatten:()=>vQ,gaussianDropout:()=>cee,gaussianNoise:()=>uee,globalAveragePooling1d:()=>HQ,globalAveragePooling2d:()=>jQ,globalMaxPool1d:()=>see,globalMaxPool2d:()=>iee,globalMaxPooling1d:()=>d3,globalMaxPooling2d:()=>p3,gru:()=>qQ,gruCell:()=>XQ,input:()=>D0,inputLayer:()=>aQ,layerNormalization:()=>OQ,leakyReLU:()=>oQ,lstm:()=>KQ,lstmCell:()=>ZQ,masking:()=>dee,maxPool1d:()=>oee,maxPool2d:()=>lee,maxPooling1d:()=>f3,maxPooling2d:()=>m3,maxPooling3d:()=>GQ,maximum:()=>RQ,minimum:()=>FQ,multiply:()=>MQ,permute:()=>NQ,prelu:()=>lQ,reLU:()=>iQ,repeatVector:()=>kQ,reshape:()=>IQ,rnn:()=>tee,separableConv2d:()=>mQ,simpleRNN:()=>JQ,simpleRNNCell:()=>YQ,softmax:()=>uQ,spatialDropout1d:()=>bQ,stackedRNNCells:()=>nee,thresholdedReLU:()=>cQ,timeDistributed:()=>aee,upSampling2d:()=>yQ,zeroPadding2d:()=>zQ});var pee=0;function A3(){return pee++}var Cp={};function Rp(e=""){return e in Cp||(Cp[e]=0),Cp[e]+=1,e+Cp[e].toString()}function py(e){return Array.isArray(e)&&Array.isArray(e[0])}function Fp(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function Pe(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new W(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function dt(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new W(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Mp(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,a)=>r*a);return t}var y3="Variable",R0=class{constructor(e,t="float32",n=y3,r=!0,a=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=A3(),n=n==null?y3:n,this.originalName=a3(n),this.name=s3(this.originalName),this.trainable_=r,this.constraint=a,this.val=m0(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),fee(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function fee(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function fy(e){return e.map(t=>t.read())}function my(e){e.forEach(t=>{t[0].write(t[1])})}var Vt=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},fr=class{constructor(e,t,n,r,a,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=a,this.outputTensorIndex=i,this.id=A3(),s!=null&&(this.originalName=a3(s),this.name=s3(this.originalName)),this.rank=t.length}},mee=0,$p=class{constructor(e,t){this.callArgs=t,this.id=mee++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let n of e.inboundLayers)n!=null&&n.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)t!=null?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},Aee=0,Xe=class extends re.Serializable{constructor(e={}){super();this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=Aee++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let n=this.getClassName();t=sa(n)+"_"+Rp(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let a=null;e.batchSize!=null&&(a=e.batchSize),n=[a].concat(e.inputShape)}this.batchInputShape=n;let r=e.dtype;r==null&&(r=e.inputDType),r==null&&(r="float32"),this.dtype=r}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new gr(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new W(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return yn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return yn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new aa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new aa(`Layer ${this.name} is not connected, no input to return.`);return yn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new aa(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new aa(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return yn(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=mt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=mt(this.inputSpec);if(e.length!==t.length)throw new W(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let r=e[n],a=t[n];if(a==null)continue;let s=r.rank;if(a.ndim!=null&&s!==a.ndim)throw new W(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${a.ndim}, found ndim=${s}`);if(a.maxNDim!=null&&s>a.maxNDim)throw new W(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${s}`);if(a.minNDim!=null&&s<a.minNDim)throw new W(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${a.minNDim}, found ndim=${s}.`);if(a.dtype!=null&&r.dtype!==a.dtype)throw new W(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${a.dtype}, found dtype=${r.dtype}.`);if(a.axes){let i=r.shape;for(let o in a.axes){let l=Number(o),c=a.axes[o],u=l>=0?i[l]:i[i.length+l];if(c!=null&&[c,null].indexOf(u)===-1)throw new W(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${c} but got shape ${i}.`)}}if(a.shape!=null)for(let i=0;i<a.shape.length;++i){let o=a.shape[i],l=r.shape[i];if(o!=null&&l!=null&&o!==l)throw new W(`Input ${n} is incompatible with layer ${this.name}: expected shape=${a.shape}, found shape=${r.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=mt(e),r=!0;for(let s of n)if(!(s instanceof fr)){r=!1;break}let a=!0;for(let s of n)if(s instanceof fr){a=!1;break}if(r===a)throw new W("Arguments to apply() must be all SymbolicTensors or all Tensors");return mi(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of mt(e))s.push(i.shape);this.build(yn(s)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&a&&(this._refCount=1)}if(this.assertInputCompatibility(e),a){let s=this.call(e,t),i=mt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=yn(o),this.activityRegularizer!=null)throw new De("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=yee(e),i=this.computeOutputShape(s),o,l=gee(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?s[0]:s),i!=null&&i.length>0&&Array.isArray(i[0])?o=i.map((c,u)=>new fr(l,c,this,mt(e),t,this.name,u)):o=new fr(l,i,this,mt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new De("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,r)=>{n!=null&&e[r]!=null&&e[r]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new aa(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);e.indexOf(n)===-1&&e.push(n)}if(e.length===1){let t=this.inboundNodes[0].outputShapes;return Array.isArray(t)&&Array.isArray(t[0])&&t.length===1?t[0]:t}else throw new aa(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new gr(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Mp(this.weights)}build(e){this.built=!0}getWeights(e=!1){return fy(e?this.trainableWeights:this.weights)}setWeights(e){U(()=>{let t=this.weights;if(t.length!==e.length)throw new W(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],r=fy(t);for(let a=0;a<r.length;++a){let s=r[a],i=t[a],o=e[a];if(!k.arraysEqual(s.shape,o.shape))throw new W(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}my(n)})}addWeight(e,t,n,r,a,s,i){if(this._addedWeightNames.indexOf(e)!==-1)throw new W(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(r=gt("zeros"));let o=r.apply(t,n),l=new R0(o,n,e,s,i);return o.dispose(),a!=null&&this.addLoss(()=>a.apply(l.read())),s==null&&(s=!0),s?this._trainableWeights.push(l):this._nonTrainableWeights.push(l),l}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=mt(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,r,a,s,i=null){let o=mt(e);t=mt(t),n=mt(n),r=mt(r),a=Fp(a),s=Fp(s);let l=[],c=[],u=[];for(let h of o)l.push(h.sourceLayer),c.push(h.nodeIndex),u.push(h.tensorIndex);new $p({outboundLayer:this,inboundLayers:l,nodeIndices:c,tensorIndices:u,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:a,outputShapes:s},i);for(let h=0;h<t.length;h++)t[h].sourceLayer=this,t[h].nodeIndex=this.inboundNodes.length-1,t[h].tensorIndex=h}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount==0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function yee(e){e=mt(e);let t=[];for(let n of e)t.push(n.shape);return yn(t)}function gee(e){return"float32"}function g3(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let r=t.inboundNodes[n];if(r.inboundLayers.length===0)return r.inputTensors;{let a=[];for(let s=0;s<r.inboundLayers.length;s++){let i=r.inputTensors[s],o=r.inboundLayers[s],l=r.nodeIndices[s],c=g3(i,o,l);for(let u of c)a.indexOf(u)===-1&&a.push(u)}return a}}}var Sl=class extends Xe{constructor(e){super({dtype:e.dtype,name:e.name!=null?e.name:Rp("input").toString()});if(e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new W("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(t==null){if(e.inputShape==null)throw new W("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new W("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let r=new fr(this.dtype,this.batchInputShape,this,[],{},this.name);r.nodeIndex=0,r.tensorIndex=0,new $p({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[r],outputTensors:[r],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new W(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};Sl.className="InputLayer";re.registerClass(Sl);function x3(e){if(e.batchShape==null&&e.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(e.batchShape!=null&&e.shape!=null)throw new W("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;e.shape!=null&&t==null&&(t=[null].concat(e.shape));let n=e.dtype;return n==null&&(n="float32"),new Sl({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}async function Oa(e){if(e==null)return;let t=[],n=[],r=[];for(let a in e){let s=e[a];if(typeof s!="number"){let i=s;t.push(i.data()),n.push(a),r.push(i)}}if(t.length>0){let a=await Promise.all(t);for(let s=0;s<a.length;++s)e[n[s]]=a[s][0];Fe(r)}}function w3(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var _3;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(_3||(_3={}));var xee=125,Tl=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},F0=class{constructor(e,t=10){e==null&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},wee=class extends Tl{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let r in t){let a=t[r];if(typeof a=="number")this.totals.hasOwnProperty(r)||(this.totals[r]=0),this.totals[r]=this.totals[r]+a*n;else{let s;r in this.totals?s=this.totals[r]:this.totals[r]=0;let i=U(()=>oe(this.totals[r],L(a,n)));this.totals[r]=i,s!=null&&s.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:U(()=>{let r=L(Ne(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),Bt(t[n])}))}},M0=class extends Tl{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let a in this.history){let s=this.history[a];for(let i=0;i<s.length;++i)if(typeof s[i]!="number"){let o=s[i];e.push(o.data()),t.push(a),n.push(i)}}let r=await Promise.all(e);for(let a=0;a<r.length;++a)this.history[t[a]][n[a]].dispose(),this.history[t[a]][n[a]]=r[a][0]}},$0=class extends Tl{constructor(e,t){super();if(this.currentEpoch=0,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=xee),this.yieldEvery==="never"&&e.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");k.isNumber(this.yieldEvery)&&(this.maybeWait=bY(this.maybeWait.bind(this),this.yieldEvery)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let r=[];this.yield!=null&&(await Oa(n),r.push(this.yield(e,t,n))),r.push(Rd()),await Promise.all(r)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await Oa(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await Oa(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(Rd()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await Oa(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await Oa(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(Rd()):k.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await Oa(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await Oa(e),await this.trainEnd(e))}};function b3(e,t){return e==null&&(e={}),e instanceof Tl?[e]:Array.isArray(e)&&e[0]instanceof Tl?e:mt(e).map(n=>new $0(n,t))}var or=class{constructor(){}static registerCallbackConstructor(e,t){k.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),or.checkForDuplicate(t),or.constructors[e]==null&&(or.constructors[e]=[]),or.constructors[e].push(t)}static checkForDuplicate(e){for(let t in or.constructors)or.constructors[+t].forEach(n=>{if(n===e)throw new W("Duplicate callback constructor.")})}static clear(){or.constructors={}}static createCallbacks(e){let t=[];for(let n in or.constructors){let r=+n;e>=r&&t.push(...or.constructors[r])}return t.map(n=>new n)}};or.constructors={};function v3(e,t,n,r,a,s,i,o,l){let c=new M0,u=[new wee,...or.createCallbacks(t)];e!=null&&u.push(...e),u.push(c);let h=new F0(u);return h.setParams({epochs:n,initialEpoch:r,samples:a,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:h,history:c}}function wr(e,t={},n=!1){return gc(e,re.SerializationMap.getMap().classNameMap,t,"layer",n)}function Dp(e,t){return U(()=>{e.dtype!=="float32"&&(e=e.asType("float32"));let n=Te(vc(e),t,!0),r=Cu(n.shape,zt()),a=Xt(Er(n,r));return Ne(e,a)})}function yi(e,t){return U(()=>bt(vc(we(t,e)),-1))}function Op(e,t){return U(()=>bt($t(we(t,e)),-1))}function El(e,t){return U(()=>{let n=we(e,t),r=pn($t(e),zt(),Number.MAX_VALUE),a=$t(Ne(n,r));return L(100,bt(a,-1))})}function _ee(e,t){return U(()=>{let n=pn(t,zt(),Number.MAX_VALUE),r=kn(oe(1,n)),a=pn(e,zt(),Number.MAX_VALUE),s=kn(oe(1,a));return bt(vc(we(r,s)),-1)})}function bee(e,t){return U(()=>{let n=Er(0,we(1,L(e,t)));return bt(vc(n),-1)})}function vee(e,t){return U(()=>{let n=Er(0,we(1,L(e,t)));return bt(n,-1)})}function kee(e,t){return U(()=>{let n=Te(L(e,t),-1),r=Ln(L(we(1,e),t),-1);return Er(0,oe(1,we(r,n)))})}function Iee(e,t){return U(()=>{let n=Math.log(2),r=we(t,e),a=we(oe(r,Go(L(-2,r))),n);return bt(a,-1)})}function Nc(e,t,n=!1){return U(()=>{if(n)t=Pu(t);else{let r=Te(t,t.shape.length-1,!0);t=Ne(t,r)}return t=pn(t,zt(),1-zt()),_t(Te(L(e.toFloat(),kn(t)),t.shape.length-1))})}function zp(e,t,n=!1){return U(()=>{let r=jo(XY(e)).toInt();t=pn(t,zt(),1-zt());let a=t.shape,s=Wo(r,a[a.length-1]).reshape(a);return Nc(s,t,n)})}function Nee(e,t){if(!k.arraysEqual(e.shape,t.shape))throw new W(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return U(()=>{let n=t.relu(),r=t.abs().neg();return n.sub(t.mul(e)).add(r.exp().log1p())})}function Pp(e,t){return U(()=>{let n;return n=pn(t,zt(),1-zt()),n=kn(Ne(n,we(1,n))),bt(Nee(e,n),-1)})}function See(e,t){return U(()=>{let n=pn(e,zt(),1),r=pn(t,zt(),1);return Te(L(e,kn(Ne(n,r))),-1)})}function Tee(e,t){return U(()=>{let n=kn(oe(zt(),t));return bt(we(t,L(e,n)),-1)})}function Ay(e,t){return U(()=>{let n=Dp(e,-1),r=Dp(t,-1),a=L(n,r);return _t(Te(a,-1))})}var Lp={meanSquaredError:yi,meanAbsoluteError:Op,meanAbsolutePercentageError:El,meanSquaredLogarithmicError:_ee,squaredHinge:bee,hinge:vee,categoricalHinge:kee,logcosh:Iee,categoricalCrossentropy:Nc,sparseCategoricalCrossentropy:zp,binaryCrossentropy:Pp,kullbackLeiblerDivergence:See,poisson:Tee,cosineProximity:Ay};function yy(e){if(typeof e=="string"){if(e in Lp)return Lp[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new W(t)}else return e}function gy(e,t){return U(()=>{let n=L(.5,In(t)),r=_c(Qn(t,n),e.dtype);return bt(xa(e,r),-1)})}function xy(e,t){return U(()=>_c(xa(Iu(e,-1),Iu(t,-1)),"float32"))}function k3(e,t){return U(()=>er(e.equal(1),t.equal(1)).sum().cast("float32"))}function Eee(e,t){return U(()=>er(e.equal(1),t.equal(0)).sum().cast("float32"))}function Cee(e,t){return U(()=>er(e.equal(0),t.equal(1)).sum().cast("float32"))}function I3(e,t){return U(()=>{let n=k3(e,t),r=Cee(e,t),a=n.add(r);return fn(Qn(a,0),n.div(a),0).cast("float32")})}function Ree(e,t){return U(()=>{let n=k3(e,t),r=Eee(e,t),a=n.add(r);return fn(Qn(a,0),n.div(a),0).cast("float32")})}function N3(e,t){return Pp(e,t)}function S3(e,t){return e.rank===t.rank&&(e=e.squeeze([e.rank-1])),t=t.argMax(-1),t.dtype!==e.dtype&&(t=t.asType(e.dtype)),xa(e,t).asType("float32")}var Fee=yi,Mee=yi,$ee=Op,Dee=Op,Oee=El,zee=El,wy=Nc,Pee=Ay,T3=zp,Wp={binaryAccuracy:gy,categoricalAccuracy:xy,precision:I3,categoricalCrossentropy:wy,sparseCategoricalCrossentropy:T3,mse:Fee,MSE:Mee,mae:$ee,MAE:Dee,mape:Oee,MAPE:zee,cosine:Pee};function Lee(e){if(typeof e=="string"&&e in Wp)return Wp[e];if(typeof e!="string"&&e!=null)return e;throw new W(`Unknown metric ${e}`)}function Bp(e){if(Wr(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(Lp))if(Lp[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(Wp))if(Wp[n]===e){t=n;break}return t!==void 0?t:e.name}}function Wee(e){let t={Adagrad:()=>Xs.adagrad(.01),Adadelta:()=>Xs.adadelta(1,.95,zt()),Adam:()=>Xs.adam(.001,.9,.999,zt()),Adamax:()=>Xs.adamax(.002,.9,.999,zt(),0),RMSProp:()=>Xs.rmsprop(.001,.9,0,zt()),SGD:()=>Xs.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new W(`Unknown Optimizer ${e}`)}var E3=1*1024*1024;function C3(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!_y(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let r=JSON.stringify(e);r.length>E3&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${r.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${E3}.`)}}function _y(e){if(e===null)return!0;if(typeof e=="object")if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if(typeof n!="string"||!_y(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!_y(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function jee(e,t,n,r=console.log){let a=Vee(e),s=["Layer (type)","Output shape","Param #"];a?(t=t||65,n=n||[.45,.85,1]):(t=t||98,n=n||[.33,.55,.67,1]),n[n.length-1]<=1&&(n=n.map(u=>Math.floor(t*u)));let i;if(!a){s.push("Receives inputs"),i=[];for(let u in e.nodesByDepth)i.push(...e.nodesByDepth[u])}r("_".repeat(t)),Vp(s,n,r),r("=".repeat(t));let o=e.layers;for(let u=0;u<o.length;++u)a?Uee(o[u],n,r):Hee(o[u],n,i,r),r((u===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=Bee(e),c=Mp(e.nonTrainableWeights);r(`Total params: ${l+c}`),r(`Trainable params: ${l}`),r(`Non-trainable params: ${c}`),r("_".repeat(t))}function Bee(e){let t;return e.collectedTrainableWeights!=null?t=Mp(e.collectedTrainableWeights):t=Mp(e.trainableWeights),t}function Vee(e){let t=!0,n=[],r=[];for(let a in e.nodesByDepth)n.push(e.nodesByDepth[a]);for(let a of n){if(a.length>1||a.length===1&&a[0].inboundLayers.length>1){t=!1;break}r.push(...a)}if(t)for(let a of e.layers){let s=!1;for(let i of a.inboundNodes)if(r.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function Vp(e,t,n=console.log){let r="";for(let a=0;a<e.length;++a)a>0&&(r=r.slice(0,r.length-1)+" "),r+=e[a],r=r.slice(0,t[a]),r+=" ".repeat(t[a]-r.length);n(r)}function Uee(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(o){r="multiple"}let a=e.name,s=e.getClassName(),i=[`${a} (${s})`,r,e.countParams().toString()];Vp(i,t,n)}function Hee(e,t,n,r){let a;try{a=JSON.stringify(e.outputShape)}catch(u){a="multiple"}let s=[];for(let u of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(u)===-1))for(let h=0;h<u.inboundLayers.length;++h){let d=u.inboundLayers[h].name,p=u.nodeIndices[h],f=u.tensorIndices[h];s.push(`${d}[${p}][${f}]`)}let i=e.name,o=e.getClassName(),l=s.length===0?"":s[0],c=[`${i} (${o})`,a,e.countParams().toString(),l];Vp(c,t,r);for(let u=1;u<s.length;++u)Vp(["","","",s[u]],t,r)}function R3(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function Sc(e,t){if(e===null)return null;if(typeof e=="string")return pi(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];R3(t,a,s)?n.push(s):n.push(Sc(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r];if(r==="name"&&typeof a=="string")n[r]=a;else{let s=pi(r);n[s]=Sc(a,s)}}return n}}function by(e,t){if(e==null)return null;if(typeof e=="string")return sa(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let s=e[a];R3(t,a,s)?n.push(s):n.push(by(s,t))}return n}else{let n={};for(let r of Object.keys(e)){let a=e[r],s=sa(r);(r==="name"||r==="className")&&typeof a=="string"?n[s]=a:n[s]=by(a,r)}return n}}var ym="3.1.0";function Gee(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return ye(t,e.dtype)}catch(n){throw new W(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var gi=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof gi)for(let t in e.id2Value)this.id2Value[t]=e.id2Value[t],t in e.id2Mask&&(this.id2Mask[t]=e.id2Mask[t]);else{if(e==null)return;for(let t of e)this.add(t.key,t.value)}}add(e,t,n){if(this.id2Value[e.id]==null)this.id2Value[e.id]=Gee(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new W(`Duplicate key: name=${e.name}, id=${e.id}`);return this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return this.id2Value[e.id]!=null}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof fr){if(this.id2Value[e.id]==null)throw new W(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new W(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof fr){if(this.id2Value[e.id]==null)throw new W(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new W(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&Fe(this.id2Mask)}},vy={},F3={};function Tc(e,t,n,r){let a=n==null?!1:n.training,s=Array.isArray(e),i=s?e:[e],o=i.map(f=>f.name),l=[],c=t.names();for(let f of o)c.indexOf(f)!==-1?l.push(t.getValue(f)):l.push(null);r!=null&&(r.maxNumTensors=-Infinity,r.minNumTensors=Infinity);let u=o.join(",")+"|"+t.names().join(","),h,d;if(vy[u]==null){let f=qee(i,t);h=f.sorted,d=f.recipientCounts,vy[u]=h,F3[u]=d}h=vy[u],d={},a||Object.assign(d,F3[u]);let p=new gi(t);for(let f=0;f<h.length;++f){if(r!=null){let E=Zh().numTensors;E>r.maxNumTensors&&(r.maxNumTensors=E),E<r.minNumTensors&&(r.minNumTensors=E)}let m=h[f],A=m.sourceLayer;if(A instanceof Sl)continue;let y=[],g=[],b=[],x=!1;for(let E of m.inputs){let M=p.getValue(E),z=p.getMask(E);y.push(M),g.push(z),z!=null&&(x=!0),a||(d[E.name]--,d[E.name]===0&&!t.hasKey(E)&&o.indexOf(E.name)===-1&&!M.isDisposed&&E.sourceLayer.stateful!==!0&&b.push(M))}x&&(n=n||{},n.mask=g[0]);let w=mt(A.apply(y,n)),_=null;A.supportsMasking&&(_=A.computeMask(y,g));let N=Xee(m),T=Array.isArray(N)?N:[N];for(let E=0;E<T.length;++E){p.hasKey(T[E])||p.add(T[E],w[E],Array.isArray(_)?_[0]:_);let M=o.indexOf(T[E].name);M!==-1&&(l[M]=w[E])}a||Fe(b)}return p.disposeMasks(),s?l:l[0]}function qee(e,t){k.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let a=M3(e[0],t);n=a.sorted,r=a.recipientMap}else{let a=new Set;for(let s of e){let{sorted:i,recipientMap:o}=M3(s,t);for(let l of i)a.has(l.name)||(n.push(l),a.add(l.name));for(let l in o)r[l]==null&&(r[l]=new Set),o[l].forEach(c=>r[l].add(c))}}return{sorted:n,recipientCounts:Kee(r)}}function Kee(e){let t={};for(let n in e)t[n]=e[n].size;return t}function M3(e,t){let n=new Set,r=[],a={};for(let o of t.names())n.add(o);let s=[],i=[];for(s.push(e);s.length>0;){let o=s[s.length-1];if(n.has(o.name)){s.pop();continue}let l=i[i.length-1]===s.length-1;if(o.inputs.length===0||l)s.pop(),r.push(o),n.add(o.name),l&&i.pop();else{i.push(s.length-1);for(let c of o.inputs)a[c.name]==null&&(a[c.name]=new Set),a[c.name].add(o.name),!n.has(c.name)&&s.push(c)}}return{sorted:r,recipientMap:a}}function Xee(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;r<e.sourceLayer.inboundNodes.length;++r)for(let a of e.sourceLayer.inboundNodes[r].outputTensors)if(a.id===e.id){n=r;break}t=e.sourceLayer.getOutputAt(n)}return t}var Ur=class extends Xe{constructor(e){super({});if(this.containerNodes=new Set,this.name=e.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=Rp(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],Ma(this.inputs).length!==this.inputs.length)throw new W(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);Ma(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let g=y.sourceLayer,b=y.nodeIndex,x=y.tensorIndex;this.outputLayers.push(g),this.outputLayersNodeIndices.push(b),this.outputLayersTensorIndices.push(x)}for(let y of this.inputs){let g=y.sourceLayer,b=y.nodeIndex,x=y.tensorIndex;Wr(b===0,"input layer has >1 nodes"),Wr(x===0,"input layer has >1 tensors"),this.inputLayers.push(g),this.inputLayersNodeIndices.push(b),this.inputLayersTensorIndices.push(x)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;y<this.inputLayers.length;y++){let g=this.inputLayers[y];if(!(g instanceof Sl))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${y} (0-based) originates from layer type ${g.getClassName()}.`);this.inputNames.push(g.name),this.feedInputShapes.push(g.batchInputShape),this.feedInputNames.push(g.name)}for(let y of this.outputLayers)this.outputNames.push(y.name);this.internalInputShapes=this.inputs.map(y=>y.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let t={},n={},r={},a={},s={},i=[],o=(y,g,b,x,w,_)=>{(x==null||w==null||_==null)&&(x=y.sourceLayer,w=y.nodeIndex,_=y.tensorIndex);let N=x.inboundNodes[w];if(b.indexOf(N)!==-1)throw new gr(`The tensor ${y.name} at layer "${x.name}" is part of a cycle.`);if(g.indexOf(N)!==-1)return;this.containerNodes.add(Ur.nodeKey(x,w)),x.id in s||(s[x.id]=Object.keys(s).length),b.indexOf(N)===-1&&b.push(N);let T=N.inboundLayers.length;for(let E=0;E<T;E++){let M=N.inputTensors[E],z=N.inboundLayers[E],P=N.nodeIndices[E],B=N.tensorIndices[E];o(M,g,b,z,P,B)}for(g.push(N);b.indexOf(N)>=0;)b.splice(b.indexOf(N),1);i.push(N)},l=[],c=[];for(let y of this.outputs)o(y,l,c);let u=i.slice().reverse();for(let y of u){n[y.id]=y,y.id in t||(t[y.id]=0);let g=t[y.id],b=r[y.outboundLayer.id]==null?0:r[y.outboundLayer.id];g=Math.max(g,b),r[y.outboundLayer.id]=g,a[y.outboundLayer.id]=y.outboundLayer,t[y.id]=g;for(let x=0;x<y.inboundLayers.length;x++){let w=y.inboundLayers[x],_=y.nodeIndices[x],N=w.inboundNodes[_],T=t[N.id]==null?0:t[N.id];t[N.id]=Math.max(g+1,T),n[N.id]=N}}let h={};for(let y in t){let g=t[y];g in h||(h[g]=[]),h[g].push(n[y])}let d={};for(let y in r){let g=r[y];g in d||(d[g]=[]),d[g].push(a[y])}let p=Object.keys(d).map(y=>parseInt(y,10)).sort(wp);this.layers=[];for(let y of p){let g=d[y];g.sort((b,x)=>{let w=s[b.id],_=s[x.id];return w<_?-1:w>_?1:0});for(let b of g)b instanceof Ur&&this.internalContainerRefs.push(b),this.layers.push(b)}this.layersByDepth=d,p=Object.keys(h).map(y=>parseInt(y,10)).sort(wp);let f=this.inputs.slice(),m=[];for(let y of p)for(let g of h[y]){let b=g.outboundLayer;if(b!=null){for(let x of g.inputTensors)if(f.indexOf(x)===-1)throw new gr(`Graph disconnected: cannot obtain value for tensor ${x} at layer "${b.name}". The following previous layers were accessed without issue: ${m}`);for(let x of g.outputTensors)f.push(x);m.push(b.name)}}this.nodesByDepth=h;let A=this.layers.map(y=>y.name);for(let y of A){let g=A.filter(b=>b===y).length;if(g!==1)throw new gr(`The name "${y}" is used ${g} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(A))}this.outboundNodes=[],this.inboundNodes=[],new $p({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount==0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new W("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},r=0;for(let s of this.layers)for(let i of s.weights){if(n[i.originalName]!=null)throw new W(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,r++}let a=[];for(let s in e){let i=s;if(n[s]==null){let o=s.split("/");i=o.slice(0,-2).concat([o[o.length-1]]).join("/")}if(n[i]!=null)a.push([n[i],e[s]]);else if(t)throw new W(`Provided weight data has no target variable: ${s}`);delete n[i]}if(t){let s=[];for(let i in n)s.push(i);if(s.length>0)throw new W(`${s.length} of ${r} weights are not set: ${s}`)}my(a)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${ym}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=by(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return U(()=>{e=mt(e);let n=new gi;for(let r=0;r<this.inputs.length;++r)n.add(this.inputs[r],e[r]);return Tc(this.outputs,n,t)})}computeMask(e,t){return U(()=>{e=mt(e);let n;return t==null?n=di(null,e.length):n=mt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Fp(e);if(t.length!==this.inputLayers.length)throw new W(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;i<t.length;i++){let o=this.inputLayers[i],l=t[i],c=o.name+"_0_0";n[c]=l}let r=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(wp);if(r.length>1)for(let i of r){let o=this.nodesByDepth[i];for(let l of o){let c=l.outboundLayer;if(this.inputLayers.map(f=>f.id).indexOf(c.id)!==-1)continue;let u=[];for(let f=0;f<l.inboundLayers.length;f++){let m=l.inboundLayers[f],A=l.nodeIndices[f],y=l.tensorIndices[f],g=`${m.name}_${A}_${y}`,b=n[g];u.push(b)}let h=c.computeOutputShape(yn(u)),d=Fp(h),p=c.inboundNodes.indexOf(l);for(let f=0;f<d.length;f++){let m=`${c.name}_${p}_${f}`;n[m]=d[f]}}}let a=[],s=[];for(let i=0;i<this.outputLayers.length;i++){let o=this.outputLayers[i],l=this.outputLayersNodeIndices[i],c=this.outputLayersTensorIndices[i],u=`${o.name}_${l}_${c}`;s.push(u)}for(let i=0;i<s.length;i++){let o=s[i];Wr(o in n),a.push(n[o])}return yn(a)}runInternalGraph(e,t){t==null&&(t=di(null,e.length));let n={};for(let o=0;o<this.inputs.length;++o){let l=this.inputs[o],c=e[o],u=t[o];n[l.id]=[c,u]}let r=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(wp);for(let o of r){let l=this.nodesByDepth[o];for(let c of l){let u=c.outboundLayer,h=c.inputTensors,d=c.outputTensors,p=new Array;for(let f of h)f.id in n&&p.push(n[f.id]);if(p.length===h.length){let f={},m,A,y,g;if(c.callArgs!=null&&(f=c.callArgs),p.length===1){let[b,x]=p[0];f.mask==null&&(f.mask=x),y=mt(u.call(b,f)),g=mt(u.computeMask(b,x)),m=[b],A=[x]}else m=p.map(b=>b[0]),A=p.map(b=>b[1]),f.mask==null&&(f.mask=A),y=mt(u.call(m,f)),g=mt(u.computeMask(m,A));if(u.activityRegularizer)throw new De("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let b=0;b<d.length;++b){let x=d[b],w=y[b],_=g[b];n[x.id]=[w,_]}}}}let a=[],s=[],i=[];for(let o of this.outputs){Wr(o.id in n,`Could not compute output ${o.name} : ${o.id}`);let[l,c]=n[o.id];i.push(l.shape),a.push(l),s.push(c)}return[a,s,i]}buildNodeConversionMap(e){let t={},n;for(let r of this.layers){n=r instanceof Ur?1:0;for(let a=0;a<r.inboundNodes.length;a++){let s=Ur.nodeKey(r,a);this.containerNodes.has(s)&&(t[s]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new W(`Was asked to retrieve layer at index ${t}, but model only has ${this.layers.length} layer(s).`);return this.layers[t]}else if(e==null)throw new W("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new W(`No such layer: ${e}`)}calculateLosses(){return U(()=>{let e=[];for(let t of this.layers)for(let n=0;n<t.inboundNodes.length;++n){let r=Ur.nodeKey(t,n);this.containerNodes.has(r)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let s of this.layers){let i=s.getClassName(),o=s.getConfig(),l=[];for(let u=0;u<s.inboundNodes.length;u++){let h=s.inboundNodes[u],d=Ur.nodeKey(s,u),p={};if(this.containerNodes.has(d)){if(h.callArgs)try{JSON.stringify(h.callArgs),p=h.callArgs}catch(f){console.warn(`Layer ${s.name} was passed non-serializable keyword arguments: ${h.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),p={}}if(h.inboundLayers.length>0){let f=[];for(let m=0;m<h.inboundLayers.length;m++){let A=h.inboundLayers[m],y=h.nodeIndices[m],g=h.tensorIndices[m],b=Ur.nodeKey(A,y),x=t[b];x==null&&(x=0),f.push([A.name,x,g,p])}l.push(f)}}}let c={};c.name=s.name,c.className=i,c.config=o,c.inboundNodes=l,n.push(c)}e.layers=n;let r=[];for(let s=0;s<this.inputLayers.length;s++){let i=this.inputLayers[s],o=this.inputLayersNodeIndices[s],l=Ur.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let c=t[l];c==null&&(c=0);let u=this.inputLayersTensorIndices[s];r.push([i.name,c,u])}e.inputLayers=r;let a=[];for(let s=0;s<this.outputLayers.length;s++){let i=this.outputLayers[s],o=this.outputLayersNodeIndices[s],l=Ur.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let c=t[l];c==null&&(c=0);let u=this.outputLayersTensorIndices[s];a.push([i.name,c,u])}return e.outputLayers=a,e}static fromConfig(e,t,n={},r=!1){let a={},s={};function i(m,A){m.name in s?s[m.name].push(A):s[m.name]=[A]}function o(m,A){let y=[],g;for(let b of A){let x=b[0],w=b[1],_=b[2];if(g=b[3]==null?{}:b[3],!(x in a)){i(m,A);return}let N=a[x];if(N.inboundNodes.length<=w){i(m,A);return}let T=N.inboundNodes[w];y.push(T.outputTensors[_])}y.length>0&&m.apply(yn(y),g)}function l(m){let A=m.name,y=wr(m,t.customObjects!=null?t.customObjects:{});y.setFastWeightInitDuringBuild(r),a[A]=y,m.inboundNodes.forEach(g=>{if(!(g instanceof Array))throw new W(`Corrupted configuration, expected array for nodeData: ${g}`);i(y,g)})}let c=t.name,u=t.layers;for(let m of u)l(m);for(;!_Y(s);)for(let m of u){let A=a[m.name];if(A.name in s){let y=s[A.name];delete s[A.name];for(let g of y)o(A,g)}}let h=[],d=[],p=t.inputLayers;for(let m of p){let A=m[0],y=m[1],g=m[2];Wr(A in a);let b=a[A].inboundNodes[y].outputTensors;h.push(b[g])}let f=t.outputLayers;for(let m of f){let A=m[0],y=m[1],g=m[2];Wr(A in a);let b=a[A].inboundNodes[y].outputTensors;d.push(b[g])}return new e({inputs:h,outputs:d,name:c})}get stateful(){if(this._stateful)throw new W("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){U(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function Zee(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(a=>null);if(r===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let a=[];return t.forEach(s=>{s in e?a.push(e[s]):a.push(null)}),a}else throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function $3(e,t){return Zee(e,t,"classWeight")}async function D3(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let a=U(()=>{if(e.shape.length===1)return e.clone();if(e.shape.length===2)if(e.shape[1]>1){let o=1;return e.argMax(o)}else{if(e.shape[1]===1)return e.reshape([e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),s=Array.from(await a.data());Fe(a);let i=[];return s.forEach(o=>{if(n[o]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${o} exists in the data but not in classWeight`);i.push(n[o])}),Qt(i,"float32")}else return null}function Jee(e,t){return L(e,t)}var Yee=32;function z3(e,t){let n,r,a=t;n=a.xs,r=a.ys,k.assert(n!=null&&r!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let s=O3("input",e.inputNames,n),i=O3("output",e.outputNames,r),o=s[0].shape[0];k.assert(s.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),k.assert(i.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l<s.length;l++)k.assert(s[l].shape[0]===o,()=>`Batch size mismatch: input ${e.inputNames[l]} has ${s[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);for(let l=0;l<i.length;l++)k.assert(i[l].shape[0]===o,()=>`Batch size mismatch: output ${e.outputNames[l]} has ${i[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);return{xs:s,ys:i}}function O3(e,t,n){if(n instanceof et)return[n];if(Array.isArray(n))return k.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let r=[];for(let a of t){if(n[a]==null)throw new W(`The feature data generated by the dataset lacks the required ${e} key '${a}'.`);r.push(n[a])}return r}}function Qee(e){if(e.length===3)throw new De("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function tte(e,t,n){let r=n.batchesPerEpoch!=null;if(k.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),k.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),k.assert(n.epochs!=null&&n.epochs>0&&Number.isInteger(n.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`),k.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),k.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let a=n.validationData!=null,s,i;if(a)if(P3(n.validationData))k.assert(n.validationBatches==null||n.validationBatches>0&&Number.isInteger(n.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`);else{let A=Qee(n.validationData);s=A.xs,i=A.ys}let o=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),c;a?c=l.slice().concat(l.map(A=>"val_"+A)):c=l.slice();let u=b3(n.callbacks,n.yieldEvery),h=n.verbose==null?1:n.verbose,{callbackList:d,history:p}=v3(u,h,n.epochs,null,null,ete(t,n),null,a,c);d.setModel(e),e.history=p,await d.onTrainBegin(),e.stopTraining_=!1;let f=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;f<n.epochs;){let A={};await d.onEpochBegin(f);let y=0,g=0;for(r||(m=await t.iterator());r?y<n.batchesPerEpoch:!0;){let b=await m.next();if(r&&b.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${y} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(b.value!=null){let{xs:x,ys:w}=z3(e,b.value),_={};_.batch=g,_.size=x[0].shape[0],await d.onBatchBegin(g,_);let N=[];if(n.classWeight!=null){let M=$3(n.classWeight,e.outputNames);for(let z=0;z<M.length;++z)N.push(await D3(w[z],null,M[z]))}let T=x.concat(w).concat(N),E=o(T);Fe(T);for(let M=0;M<l.length;++M){let z=l[M],P=E[M];_[z]=P,Bt(P)}await d.onBatchEnd(g,_),w3(_),g++,y++}if(r?y>=n.batchesPerEpoch:b.done){if(a){let x;P3(n.validationData)?x=mt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):x=mt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?Yee:n.validationBatchSize,verbose:0}));for(let w=0;w<e.metricsNames.length;++w)A[`val_${e.metricsNames[w]}`]=x[w]}break}if(e.stopTraining_)break}if(await d.onEpochEnd(f,A),f++,e.stopTraining_)break}return await d.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function ete(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function P3(e){return typeof e.iterator=="function"}function nte(e){return typeof e.next=="function"}async function rte(e,t,n){n=n||{};let r=n.batches!=null,a=e.testFunction,s=[];if(n.verbose>0)throw new De("Verbose mode is not implemented yet.");k.assert(!r||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let i=nte(t)?t:await t.iterator(),o=0,l=0;for(;r?l<n.batches:!0;){let c=await i.next();if(s=U(()=>{if(c.value){let{xs:u,ys:h}=z3(e,c.value),d=u.concat(h),p=U(()=>a(d));if(Fe(d),l===0)for(let m=0;m<p.length;++m)s.push(Se(0));let f=d[0].shape[0];for(let m=0;m<p.length;++m){let A=p[m],y=s[m];s[m]=U(()=>oe(s[m],L(f,A))),l>0&&Fe(y)}Fe(p),o+=f,++l}return s}),c.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let c=0;c<s.length;++c){let u=s[c];s[c]=Ne(s[c],o),Fe(u)}return yn(s)}function ky(e){k.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Ec(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>Ai(r,t,n-t)):Ai(e,t,n-t)}function Iy(e,t){return U(()=>e==null?null:Array.isArray(e)?e.map(n=>Iy(n,t)):l3(e,t.dtype==="int32"?t:t.toInt()))}function Ny(e,t){let n=[],r=0,a=null;for(;r<e;)a=r+t,a>=e&&(a=e),n.push([r,a]),r=a;return n}async function ate(e,t,n,r,a,s,i,o,l,c,u,h,d,p,f){a==null&&(a=32),s==null&&(s=1),u==null&&(u=!0),d==null&&(d=0);let m=!1;if(l!=null&&c!=null&&(m=!0),f!=null&&(m=!0,p==null))throw new W("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let A=e.checkNumSamples(n,a,p,"steps_per_epoch"),y;A!=null&&(y=xr(0,A)),i==null&&(i=1);let{callbackList:g,history:b}=v3(o,i,s,d,A,p,a,m,h);g.setModel(e),e.history=b,await g.onTrainBegin(),e.stopTraining_=!1;for(let x=d;x<s;++x){await g.onEpochBegin(x);let w={};if(p!=null)throw new De("stepsPerEpoch mode is not implemented yet.");{if(u==="batch")throw new De("batch shuffling is not implemneted yet");u&&k.shuffle(y);let _=Qt(y),N=Ny(A,a);for(let T=0;T<N.length;++T){let E={};if(await g.onBatchBegin(T,E),U(()=>{let M=N[T][0],z=N[T][1],P=Ai(_,M,z-M);E.batch=T,E.size=z-M;let B=Iy(n,P),G=t(B);for(let V=0;V<r.length;++V){let K=r[V],X=G[V];E[K]=X,Bt(X)}if(T===N.length-1&&m){let V=e.testLoop(l,c,a);for(let K=0;K<r.length;++K){let X=r[K],ee=V[K];Bt(ee),w["val_"+X]=ee}}}),await g.onBatchEnd(T,E),w3(E),e.stopTraining_)break}_.dispose()}if(await g.onEpochEnd(x,w),e.stopTraining_)break}return await g.onTrainEnd(),await e.history.syncData(),e.history}async function ste(e,t,n,r={}){if(e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;let a,s,i,o,l,c,u;try{let h=r.batchSize==null?32:r.batchSize;ky(h);let d=!1,p=await e.standardizeUserData(t,n,r.sampleWeight,r.classWeight,d,h);a=p[0],s=p[1],u=p[2];let f=!1,m;if(r.validationData!=null&&r.validationData.length>0){if(f=!0,r.validationData.length===2)i=r.validationData[0],o=r.validationData[1];else throw r.validationData.length===3?new De("validationData including sample weights is not supported yet."):new W(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let _=!0,N=await e.standardizeUserData(i,o,null,null,_,h);l=N[0],c=N[1],m=l.concat(c)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){f=!0;let _=Math.floor(a[0].shape[0]*(1-r.validationSplit)),N=a[0].shape[0];l=Ec(a,_,N),a=Ec(a,0,_),c=Ec(s,_,N),s=Ec(s,0,_),m=l.concat(c)}else r.validationSteps!=null&&(f=!0);let A=a.concat(s).concat(u);e.checkTrainableWeightsConsistency();let y=e.makeTrainFunction(),g=e.getDedupedMetricsNames(),b,x;f?(e.makeTestFunction(),b=e.testFunction,x=g.slice().concat(g.map(_=>"val_"+_))):(b=null,m=[],x=g.slice());let w=b3(r.callbacks,r.yieldEvery);return await ate(e,y,A,g,h,r.epochs,r.verbose,w,b,m,r.shuffle,x,r.initialEpoch,null,null)}finally{e.isTraining=!1,xi(a,t),xi(s,n),xi(l,i),xi(c,o),u!=null&&Fe(u)}}function L3(e){let t=[];e instanceof et&&(e=[e]);for(let n=0;n<e.length;++n){let r=e[n];if(r.rank===1)t.push(bc(r,1));else{if(r.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(r)}}return t}function xi(e,t){if(e==null)return;let n=[];if(t instanceof et)n.push(t.id);else if(Array.isArray(t))t.forEach(a=>n.push(a.id));else if(t!=null)for(let a in t){let s=t[a];n.push(s.id)}let r=[];if(e instanceof et)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(a=>{n.indexOf(a.id)===-1&&r.push(a)});else if(e!=null)for(let a in e){let s=e[a];n.indexOf(s.id)===-1&&r.push(s)}r.forEach(a=>{a.isDisposed||a.dispose()})}function ite(e){return e instanceof et}function Sy(e){return Array.isArray(e)}function W3(e){return!ite(e)&&!Sy(e)}function B3(e,t,n,r=!0,a=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(Sy(e)&&e.length>0)i=!0;else if(W3(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new W(`Error when checking model ${a} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(W3(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new W(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(Sy(e)){if(e=e,e.length!==t.length)throw new W(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);s=e}else{if(e=e,t.length>1)throw new W(`The model ${a} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=L3(s),n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new W(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s). but got array with shape ${o.shape}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let c=o.shape[l],u=n[i][l];if(u!=null&&u>=0&&c!==u)throw new W(`Error when checking ${a}: expected ${t[i]} to have shape [${n[i]}], but got array with shape [${o.shape}].`)}}return s}function ote(e,t,n){let r=Ma(e.map(s=>s.shape[0]));r.sort();let a=Ma(t.map(s=>s.shape[0]));if(a.sort(),r.length>1)throw new W(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(s=>s.shape))}`);if(a.length>1)throw new W(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(r.length>0&&a.length>0&&!k.arraysEqual(r,a))throw new W(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${a[0]} target sample(s).`)}function lte(e,t,n){let r=[yi,Pp,Nc];for(let a=0;a<e.length;++a){let s=e[a],i=t[a],o=n[a];if(i!=null){if(i===Nc&&s.shape[s.shape.length-1]===1)throw new W(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(r.indexOf(i)!==-1){let l=s.shape.slice(1),c=o.slice(1);for(let u=0;u<l.length;++u){let h=l[u],d=c[u];if(d!=null&&h!==d)throw new W(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function V3(e,t,n,r=!0,a=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new W(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new W(`The model expects ${t.length} ${a} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new W(`Error when checking ${a}: expected ${t[i]} to have ${n[i].length} dimension(s), but got array with shape ${JSON.stringify(o.shape)}`);for(let l=0;l<n[i].length;++l){if(l===0&&!r)continue;let c=o.shape[l],u=n[i][l];if(u!=null&&u!==c)throw new W(`Error when checking ${a}: expected ${t[i]} to have shape ${JSON.stringify(n[i])} but got array with shape ${JSON.stringify(o.shape)}.`)}}}function ute(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(r=>n);{let r=[];for(let a of t){let s=n.hasOwnProperty(a)?n[a]:[];Array.isArray(s)||(s=[s]),r.push(s)}return r}}var cte="layers-model",Qr=class extends Ur{constructor(e){super(e);this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new W("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");jee(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=Wee(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Yr))throw new W("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let s in e.loss)if(this.outputNames.indexOf(s)===-1)throw new W(`Unknown entry in loss dictionary: "${s}". Only expected the following keys: ${this.outputNames}`);for(let s of this.outputNames)e.loss[s]==null&&console.warn(`Output "${s}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${s} during training`),t.push(yy(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new W(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(s=>yy(s))}else{let s=yy(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s<this.outputs.length;++s){let i=this.internalOutputShapes[s],o=this.outputNames[s];this.feedOutputNames.push(o),this.feedOutputShapes.push(i),this.feedLossFns.push(this.lossFunctions[s])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],mi("loss",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=this.lossFunctions[s];this.outputs.length>1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let r=ute(e.metrics,this.outputNames),a=(s,i,o)=>{this.outputNames.length>1&&(i=this.outputNames[s]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([o,s])};mi("metric",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=r[s];(o=>{let l="",c,u,h;for(let d of o){if(typeof d=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(d)!==-1){let f=this.internalOutputShapes[s];f[f.length-1]===1||this.lossFunctions[s]===Pp?["accuracy","acc"].indexOf(d)!==-1?u=gy:["crossentropy","ce"].indexOf(d)!==-1&&(u=N3):this.lossFunctions[s]===zp?["accuracy","acc"].indexOf(d)!==-1?u=S3:["crossentropy","ce"].indexOf(d)!==-1&&(u=T3):["accuracy","acc"].indexOf(d)!==-1?u=xy:["crossentropy","ce"].indexOf(d)!==-1&&(u=wy);let m;["accuracy","acc"].indexOf(d)!==-1?m="acc":["crossentropy","ce"].indexOf(d)!==-1&&(m="ce"),h=u,c=l+m}else h=Lee(d),c=l+Bp(d);let p;mi(c,()=>{p=h}),a(s,c,p)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let r=n.batchSize==null?32:n.batchSize;ky(r);let a=!0,s=this.standardizeUserDataXY(e,t,a,r);try{let i=s[0].concat(s[1]);this.makeTestFunction();let o=this.testFunction,l=this.testLoop(o,i,r,n.verbose,n.steps);return yn(l)}finally{xi(s[0],e),xi(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),rte(this,e,t)}checkNumSamples(e,t,n,r="steps"){let a;if(n!=null){if(a=null,t!=null)throw new W(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?a=e[0].shape[0]:a=e.shape[0];else throw new W(`Either the input data should have a defined shape, or ${r} shoud be specified.`);return a}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new W("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],a=this.retrieveSymbolicTensors(r),s=new gi;if(e instanceof et&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new W(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;o<this.inputs.length;++o)s.add(this.inputs[o],e[o])}else for(let o of this.inputs){let l=e[o.name];if(l==null)throw new W(`No value is provided for the model's input ${o.name}`);s.add(o,l)}let i=Tc(a,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=di(null,e.length),n=e.length;for(let r of this.layers){let a=Array.isArray(r.output)?r.output:[r.output],s=a.map(i=>i.name);for(let i=0;i<e.length;++i){let o=s.indexOf(e[i]);if(o!==-1&&(t[i]=a[o],n--),n===0)break}if(n===0)break}if(n>0){let r=[];throw t.forEach((a,s)=>{a==null&&r.push(e[s])}),new W(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(r)}`)}return t}predictLoop(e,t=32,n=!1){return U(()=>{let r=this.checkNumSamples(e);if(n)throw new De("Verbose predictLoop() is not implemented yet.");let a=Ny(r,t),s=this.outputs.map(i=>[]);for(let i=0;i<a.length;++i)U(()=>{let o=a[i][0],l=a[i][1],c=Ec(e,o,l),u=[];if(Array.isArray(c))for(let d=0;d<c.length;++d)u.push({key:this.inputs[d],value:c[d]});else u.push({key:this.inputs[0],value:c});let h=new gi(u);return Tc(this.outputs,h)}).forEach((o,l)=>s[l].push(o));return yn(s.map(i=>ct(i,0)))})}predict(e,t={}){let n=L3(e);V3(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return ky(r),this.predictLoop(n,r)}finally{xi(n,e)}}predictOnBatch(e){V3(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(this.optimizer_==null)throw new gr("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let a=[];for(let s=0;s<this.feedOutputShapes.length;++s){let i=this.feedOutputShapes[s];this.feedLossFns[s]===zp?a.push(i.slice(0,i.length-1).concat([1])):a.push(i)}if(e=B3(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=B3(t,this.feedOutputNames,a,!1,"target"),ote(e,t,null),lte(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&r!=null&&r>0&&e[0].shape[0]%r!=0)throw new W(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,a=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,a,s);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(r!=null){let c=$3(r,this.outputNames);l=[];for(let u=0;u<c.length;++u)l.push(await D3(o[u],null,c[u]))}return[i,o,l]}testLoop(e,t,n,r=0,a){return U(()=>{let s=this.checkNumSamples(t,n,a,"steps"),i=[];if(r>0)throw new De("Verbose mode is not implemented yet.");if(a!=null)throw new De("steps mode in testLoop() is not implemented yet");{let o=Ny(s,n),l=Qt(xr(0,s));for(let c=0;c<o.length;++c){let u=o[c][0],h=o[c][1],d=Ai(l,u,h-u),p=Iy(t,d),f=e(p);if(c===0)for(let m=0;m<f.length;++m)i.push(Se(0));for(let m=0;m<f.length;++m){let A=f[m];i[m]=oe(i[m],L(h-u,A))}}for(let c=0;c<i.length;++c)i[c]=Ne(i[c],s)}return i})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let r=e[n],a=r;Zb(e,r)>1&&(a+=`_${Zb(e.slice(0,n),r)}`),t.push(a)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),s=[],i=()=>{let c=[];for(let p=0;p<this.inputs.length;++p)c.push({key:this.inputs[p],value:n[p]});let u=new gi(c),h=Tc(this.outputs,u,{training:!0}),d;for(let p=0;p<this.lossFunctions.length;++p){let f=this.lossFunctions[p](r[p],h[p]);a[p]!=null&&(f=Jee(f,a[p]));let m=bt(f);t.push(m),p===0?d=f:d=oe(d,f)}for(let p=0;p<this.metricsTensors.length;++p){let f;if(this.outputs.length>1&&p<this.outputs.length)f=t[p];else{let m=this.metricsTensors[p][0],A=this.metricsTensors[p][1];f=bt(m(r[A],h[A]))}Bt(f),s.push(f)}return d=bt(d),this.calculateLosses().forEach(p=>{d=oe(d,p)}),d},o=this.collectedTrainableWeights.map(c=>c.read()),l=!0;return[this.optimizer_.minimize(i,l,o)].concat(s)}}makeTestFunction(){this.testFunction=e=>U(()=>{let t=[],n,r=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let l=0;l<this.inputs.length;++l)s.push({key:this.inputs[l],value:r[l]});let i=new gi(s),o=Tc(this.outputs,i);for(let l=0;l<this.lossFunctions.length;++l){let c=this.lossFunctions[l],u=bt(c(a[l],o[l]));l===0?n=u:n=oe(n,u),t.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let c=this.metricsTensors[l][0],u=this.metricsTensors[l][1],h=bt(c(a[u],o[u]));t.push(h)}return t})}async fit(e,t,n={}){return ste(this,e,t,n)}async fitDataset(e,t){return tte(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),r=n[0],a=n[1],s=this.makeTrainFunction()(r.concat(a)),i=[];for(let o of s){let l=await o.data();i.push(l[0])}return Fe(s),yn(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,r=n?this.trainableWeights:this.weights,a=this.getWeights(n);for(let s=0;s<r.length;++s)n&&!r[s].trainable||t.push({name:r[s].originalName,tensor:a[s]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=Zh().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-Zh().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=sa(this.loss);else if(Array.isArray(this.loss)){for(let t of this.loss)if(typeof t!="string")throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map(t=>sa(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let r of t)if(typeof n[r]=="string")e[r]=sa(n[r]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[sa(Bp(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>sa(Bp(e)));{let e={};for(let t in this.metrics)e[t]=sa(Bp(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(e.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(e.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(e.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let t=Sc(e.optimizer_config),n=wr(t),r;if(typeof e.loss=="string")r=pi(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(s=>pi(s));else if(e.loss!=null){r={};for(let s in e.loss)r[s]=pi(e.loss[s])}let a;if(Array.isArray(e.metrics))a=e.metrics.map(s=>pi(s));else if(e.metrics!=null){a={};for(let s in e.metrics)a[s]=pi(e.metrics[s])}this.compile({loss:r,metrics:a,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=dn.getSaveHandlers(e);if(i.length===0)throw new W(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new W(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new W("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await dn.encodeWeights(this.getNamedWeights(t)),r=!1,a=null,s={modelTopology:this.toJSON(a,r),format:cte,generatedBy:`TensorFlow.js tfjs-layers v${ym}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await dn.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=dn.concatenateArrayBuffers([n.data,o])}if(this.userDefinedMetadata!=null){let i=!0;C3(this.userDefinedMetadata,this.name,i),s.userDefinedMetadata=this.userDefinedMetadata}return s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){C3(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Qr.className="Model";re.registerClass(Qr);var U3=class extends Qr{};U3.className="Functional";re.registerClass(U3);async function hte(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=Sc(n),a=wr(r,t);if(e.weightsManifest!=null){let s=await dn.loadWeights(e.weightsManifest,e.pathPrefix,a.weights.map(o=>o.originalName)),i={};for(let o of a.weights)i[o.originalName]=s[o.originalName];a.loadWeights(i),Fe(s)}return a}async function pte(e,t){if(t==null&&(t={}),typeof e=="string"){let n=dn.getLoadHandlers(e,t);if(n.length===0)n.push(dn.browserHTTPRequest(e,t));else if(n.length>1)throw new W(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return dte(e,void 0,t)}async function dte(e,t,n){if(n==null&&(n={}),e.load==null)throw new W("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),a=r.modelTopology;a.model_config!=null&&(a=a.model_config);let s=n.strict==null?!0:n.strict,i=r.weightData!=null&&r.weightSpecs!=null&&s,o=wr(Sc(a),t,i),l=r.trainingConfig;if(l!=null&&o.loadTrainingConfig(l),r.userDefinedMetadata!=null&&o.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new W("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:c,optimizerWeights:u}=fte(r.weightData,r.weightSpecs);o.loadWeights(c,s),o.optimizer!=null&&u.length>0&&await o.optimizer.setWeights(u),Fe(c),Fe(u.map(h=>h.tensor))}return o}function fte(e,t){let n=dn.decodeWeights(e,t),r={},a=[];return t.forEach(s=>{s.group==="optimizer"?a.push({name:s.name,tensor:n[s.name]}):r[s.name]=n[s.name]}),{modelWeights:r,optimizerWeights:a}}var Yo=class extends Qr{constructor(e){super({inputs:[],outputs:[]});if(e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Rp("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(t=>t<0))throw new W(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Yo||e instanceof Qr,n;if(t){if(n=e,n.outputs.length!==1)throw new W("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new W("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new W("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let r=x3({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(r)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new W(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new W("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=g3(this.outputs[0])}this.inboundNodes=[],new $p({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:di(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(r=>r.shape),outputShapes:this.outputs[0].shape})}else{let r=e.apply(this.outputs[0]);if(Array.isArray(r))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[r],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(dt(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Qr({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new gr("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new gr("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new gr("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new gr("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},r=!1){let a,s={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new W("Legacy serialization format not supported yet.");a=t}else k.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),a=t.layers,delete t.layers,s=t;let i=new e(s);if(!(i instanceof Yo))throw new De(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of a){let l=wr(o,void 0,r);r&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new W("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new W("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};Yo.className="Sequential";re.registerClass(Yo);function W8(e){return new Qr(e)}function B8(e){return new Yo(e)}function V8(e,t){return t==null&&(t={}),pte(e,t)}function D0(e){return x3(e)}function U8(e,t){or.registerCallbackConstructor(e,t)}var Rn=class extends re.Serializable{getConfig(){return{}}},H3=class extends Rn{apply(e,t=1){return ZY(e,t)}};H3.className="elu";re.registerClass(H3);var j3=class extends Rn{apply(e){return md(e)}};j3.className="selu";re.registerClass(j3);var G3=class extends Rn{apply(e){return Rr(e)}};G3.className="relu";re.registerClass(G3);var q3=class extends Rn{apply(e){return U(()=>Xo(6,Rr(e)))}};q3.className="relu6";re.registerClass(q3);var X3=class extends Rn{apply(e){return e}};X3.className="linear";re.registerClass(X3);var K3=class extends Rn{apply(e){return Yn(e)}};K3.className="sigmoid";re.registerClass(K3);var Z3=class extends Rn{apply(e){return YY(e)}};Z3.className="hardSigmoid";re.registerClass(Z3);var J3=class extends Rn{apply(e){return Go(e)}};J3.className="softplus";re.registerClass(J3);var Y3=class extends Rn{apply(e){return JY(e)}};Y3.className="softsign";re.registerClass(Y3);var Q3=class extends Rn{apply(e){return Vo(e)}};Q3.className="tanh";re.registerClass(Q3);var Ty=class extends Rn{apply(e,t=-1){return Pu(e,t)}};Ty.className="softmax";re.registerClass(Ty);var e7=class extends Rn{apply(e,t=-1){return ld(e,t)}};e7.className="logSoftmax";re.registerClass(e7);var t7=class extends Rn{apply(e,t=1){return U(()=>Yn(e.mul(t)).mul(e))}};t7.className="swish";re.registerClass(t7);function za(e){return e.getClassName()}function Ey(e,t={}){return gc(e,re.SerializationMap.getMap().classNameMap,t,"activation")}function Pa(e){if(e==null){let t={};return t.className="linear",t.config={},Ey(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},Ey(t)}else return e instanceof Rn?e:Ey(e)}function Cy(e){if(e!=null&&typeof e!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}var n7=class extends re.Serializable{},Cc=class extends n7{constructor(e){super();Cy(e),this.l1=e==null||e.l1==null?.01:e.l1,this.l2=e==null||e.l2==null?.01:e.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(e){return U(()=>{let t=Ct([1]);return this.hasL1&&(t=oe(t,Te(L(this.l1,$t(e))))),this.hasL2&&(t=oe(t,Te(L(this.l2,vc(e))))),t.asScalar()})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Cc.className="L1L2";re.registerClass(Cc);function mte(e){return Cy(e),new Cc({l1:e!=null?e.l1:null,l2:0})}function Ate(e){return Cy(e),new Cc({l2:e!=null?e.l2:null,l1:0})}var r7={l1l2:"L1L2"};function pt(e){return jA(e)}function a7(e,t={}){return gc(e,re.SerializationMap.getMap().classNameMap,t,"regularizer")}function xt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in r7?r7[e]:e,config:{}};return a7(t)}else return e instanceof n7?e:a7(e)}var Ry=class extends Xe{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Pe(e);let n=Rr(e);return this.maxValue!=null&&(n=pn(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};Ry.className="ReLU";re.registerClass(Ry);var Fy=class extends Xe{constructor(e){super(e==null?{}:e);this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Pe(e);return Ru(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};Fy.className="LeakyReLU";re.registerClass(Fy);var My=class extends Xe{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=gt(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=xt(e.alphaRegularizer),this.alphaConstraint=Lt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new W(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=dt(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let r of this.sharedAxes)t[r-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let r=1;r<e.length;++r)n[r]=e[r];this.inputSpec=[new Vt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=Pe(e),Du(e,this.alpha.read())}getConfig(){let e={alphaInitializer:kt(this.alphaInitializer),alphaRegularizer:pt(this.alphaRegularizer),alphaConstraint:Pt(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};My.className="PReLU";re.registerClass(My);var $y=class extends Xe{constructor(e){super(e==null?{}:e);if(this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new De(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Pe(e);return Ho(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};$y.className="ELU";re.registerClass($y);var Dy=class extends Xe{constructor(e){super(e==null?{}:e);this.DEFAULT_THETA=1,e==null&&(e={}),this.theta=e.theta==null?this.DEFAULT_THETA:e.theta}call(e,t){let n=Pe(e);return n.mul(_c(n.greater(this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};Dy.className="ThresholdedReLU";re.registerClass(Dy);var Oy=class extends Xe{constructor(e){super(e==null?{}:e);this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new Ty().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=Pe(e);return this.softmax(n,this.axis)}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};Oy.className="Softmax";re.registerClass(Oy);function Cl(e,t,n){if(typeof e=="number")return di(e,t);if(e.length!==t)throw new W(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r<t;++r){let a=e[r];if(!GY(a))throw new W(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${a}`)}return e}function _r(e,t,n,r,a=1){if(e==null)return e;let s=t+(t-1)*(a-1),i;return n==="same"?i=e:i=e-s+1,Math.floor((i+r-1)/r)}function Up(e,t,n,r){if(e==null)return null;if(r==="valid")e=e*t+Da([n-t,0]);else if(r==="same")e=e*t;else throw new W(`Unsupport padding mode: ${r}.`);return e}function zy(e,t){return U(()=>(Tt(t),t==="channelsFirst"?at(e,[0,2,3,1]):e))}function s7(e,t){return U(()=>(Tt(t),t==="channelsFirst"?at(e,[0,2,3,4,1]):e))}function yte(e,t,n,r=1,a="valid",s,i=1){return U(()=>{if(s==null&&(s=yr()),Tt(s),e.shape.length!==3)throw new W(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new W(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new W(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=at(e,[0,2,1])),a==="causal")throw new De("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=td(e,t,r,a==="same"?"same":"valid","NWC",i);return n!=null&&(o=Vr(o,n)),o})}function i7(e,t,n,r=[1,1],a="valid",s,i,o=null){return U(()=>{if(s==null&&(s=yr()),Tt(s),e.rank!==3&&e.rank!==4)throw new W(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new W(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=zy(e,s);if(a==="causal")throw new De("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=va.conv2d({x:l,filter:t,strides:r,pad:a==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=at(l,[0,3,1,2])),l})}function gte(e,t,n,r=[1,1,1],a="valid",s,i){return U(()=>{if(s==null&&(s=yr()),Tt(s),e.rank!==4&&e.rank!==5)throw new W(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new W(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=s7(e,s);if(a==="causal")throw new De("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=Hf(o,t,r,a==="same"?"same":"valid","NDHWC",i),n!=null&&(o=Vr(o,n)),s==="channelsFirst"&&(o=at(o,[0,4,1,2,3])),o})}var Py=class extends Xe{constructor(e,t){super(t);if(this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Py.verifyArgs(t),this.rank=e,jt(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new De(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Cl(t.kernelSize,e,"kernelSize"),this.strides=Cl(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,Un(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Tt(this.dataFormat),this.activation=Pa(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=gt(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Lt(t.biasConstraint),this.biasRegularizer=xt(t.biasRegularizer),this.activityRegularizer=xt(t.activityRegularizer),this.dilationRate=Cl(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new W(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new W(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new W(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(Wr("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!qA(e.kernelSize,"number",1,3))throw new W(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:za(this.activation),useBias:this.useBias,biasInitializer:kt(this.biasInitializer),biasRegularizer:pt(this.biasRegularizer),activityRegularizer:pt(this.activityRegularizer),biasConstraint:Pt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},Rc=class extends Py{constructor(e,t){super(e,t);this.kernel=null,Rc.verifyArgs(t),this.filters=t.filters,jt(this.filters,"filters"),this.kernelInitializer=gt(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Lt(t.kernelConstraint),this.kernelRegularizer=xt(t.kernelRegularizer)}build(e){e=dt(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new W(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return U(()=>{e=Pe(e);let n,r=this.bias==null?null:this.bias.read(),a=Yb(this.activation.getClassName());if(a!=null&&this.rank===2)n=i7(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate,a);else{if(this.rank===1)n=yte(e,this.kernel.read(),r,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=i7(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=gte(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new De("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=dt(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let a=0;a<n.length;++a){let s=_r(n[a],this.kernelSize[a],this.padding,this.strides[a],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[a]);t.push(s)}let r=[e[0]];return this.dataFormat==="channelsLast"?(r=r.concat(t),r.push(this.filters)):(r.push(this.filters),r=r.concat(t)),r}getConfig(){let e={filters:this.filters,kernelInitializer:kt(this.kernelInitializer),kernelRegularizer:pt(this.kernelRegularizer),kernelConstraint:Pt(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||typeof e.filters!="number"||e.filters<1)throw new W(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},Fc=class extends Rc{constructor(e){super(2,e);Fc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!qA(e.kernelSize,"number",1,2))throw new W(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};Fc.className="Conv2D";re.registerClass(Fc);var Hp=class extends Rc{constructor(e){super(3,e);Hp.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new W(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};Hp.className="Conv3D";re.registerClass(Hp);var Ly=class extends Fc{constructor(e){super(e);if(this.inputSpec=[new Vt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new W(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=dt(e),e.length!==4)throw new W("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new W("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Vt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return U(()=>{let n=Pe(e);if(n.shape.length!==4)throw new W(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,a=r[0],s,i;this.dataFormat==="channelsFirst"?(s=2,i=3):(s=1,i=2);let o=r[s],l=r[i],c=this.kernelSize[0],u=this.kernelSize[1],h=this.strides[0],d=this.strides[1],p=Up(o,h,c,this.padding),f=Up(l,d,u,this.padding),m=[a,p,f,this.filters];this.dataFormat!=="channelsLast"&&(n=at(n,[0,2,3,1]));let A=nd(n,this.kernel.read(),m,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(A=at(A,[0,3,1,2])),this.bias!=null&&(A=Vr(A,this.bias.read(),this.dataFormat)),this.activation!=null&&(A=this.activation.apply(A)),A})}computeOutputShape(e){e=dt(e);let t=e.slice(),n,r,a;this.dataFormat==="channelsFirst"?(n=1,r=2,a=3):(n=3,r=1,a=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[r]=Up(t[r],o,s,this.padding),t[a]=Up(t[a],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Ly.className="Conv2DTranspose";re.registerClass(Ly);var o7=class extends Rc{constructor(e,t){super(e,t);if(this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new W("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new W("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new W(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=gt(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=xt(t.depthwiseRegularizer),this.depthwiseConstraint=Lt(t.depthwiseConstraint),this.pointwiseInitializer=gt(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=xt(t.pointwiseRegularizer),this.pointwiseConstraint=Lt(t.pointwiseConstraint)}build(e){if(e=dt(e),e.length<this.rank+2)throw new W(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null||e[t]<0)throw new W(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],r=this.kernelSize.concat([n,this.depthMultiplier]),a=[];for(let i=0;i<this.rank;++i)a.push(1);a.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",r,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",a,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new Vt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return U(()=>{e=Pe(e);let n;if(this.rank===1)throw new De("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=at(e,[0,2,3,1])),n=am(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Vr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=at(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=kt(this.depthwiseInitializer),e.pointwiseInitializer=kt(this.pointwiseInitializer),e.depthwiseRegularizer=pt(this.depthwiseRegularizer),e.pointwiseRegularizer=pt(this.pointwiseRegularizer),e.depthwiseConstraint=Pt(this.depthwiseConstraint),e.pointwiseConstraint=Pt(this.pointwiseConstraint),e}};o7.className="SeparableConv";var Wy=class extends o7{constructor(e){super(2,e)}};Wy.className="SeparableConv2D";re.registerClass(Wy);var jp=class extends Rc{constructor(e){super(1,e);jp.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!qA(e.kernelSize,"number",1,1))throw new W(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};jp.className="Conv1D";re.registerClass(jp);var By=class extends Xe{constructor(e){super(e);typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return U(()=>{if(e=Pe(e),this.dataFormat==="channelsLast"){let n=_p(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return _p(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=_p(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return _p(n,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};By.className="Cropping2D";re.registerClass(By);var Vy=class extends Xe{constructor(e){super(e);this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Tt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,UY(this.interpolation)}computeOutputShape(e){if(this.dataFormat==="channelsFirst"){let t=e[2]==null?null:this.size[0]*e[2],n=e[3]==null?null:this.size[1]*e[3];return[e[0],e[1],t,n]}else{let t=e[1]==null?null:this.size[0]*e[1],n=e[2]==null?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return U(()=>{let n=Pe(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=at(n,[0,2,3,1]);let a=this.size[0]*r[2],s=this.size[1]*r[3],i=this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s]);return at(i,[0,3,1,2])}else{let a=this.size[0]*r[1],s=this.size[1]*r[2];return this.interpolation==="nearest"?n.resizeNearestNeighbor([a,s]):n.resizeBilinear([a,s])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Vy.className="UpSampling2D";re.registerClass(Vy);function xte(e,t,n=[1,1],r="valid",a,s){return U(()=>{a==null&&(a=yr()),Tt(a);let i=zy(e,a);if(e.rank!==4)throw new W(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new W(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=Uo(i,t,n,r==="same"?"same":"valid","NHWC",s),a==="channelsFirst"&&(i=at(i,[0,3,1,2])),i})}var Uy=class extends Py{constructor(e){super(2,e);this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=gt(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Lt(e.depthwiseConstraint),this.depthwiseRegularizer=xt(e.depthwiseRegularizer)}build(e){if(e=dt(e),e.length<4)throw new W(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new W(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return U(()=>{e=Pe(e);let n=xte(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Vr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=dt(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,a=_r(t,this.kernelSize[0],this.padding,this.strides[0]),s=_r(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],r,a,s]:[e[0],a,s,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=kt(this.depthwiseInitializer),e.depthwiseRegularizer=pt(this.depthwiseRegularizer),e.depthwiseConstraint=Pt(this.depthwiseRegularizer),e}};Uy.className="DepthwiseConv2D";re.registerClass(Uy);function l7(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new W("When inputs is an array, neither initialState or constants should be provided");r!=null&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function a(s){return s==null||Array.isArray(s)?s:[s]}return t=a(t),n=a(n),{inputs:e,initialState:t,constants:n}}function u7(e,t,n,r=!1,a,s,i=!1,o=!1){return U(()=>{let l=t.shape.length;if(l<3)throw new W(`Input should be at least 3D, but is ${l}D.`);let c=[1,0].concat(xr(2,l));if(t=at(t,c),s!=null)throw new De("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),a!=null&&(a=a.asType("bool").asType("float32"),a.rank===l-1&&(a=vn(a,-1)),a=at(a,c)),r&&(t=Nn(t,0),a!=null&&(a=Nn(a,0)));let u=[],h,d=n,p=t.shape[0],f=tr(t),m;a!=null&&(m=tr(a));for(let y=0;y<p;++y){let g=f[y],b=U(()=>e(g,d));if(a==null)h=b[0],d=b[1];else{let x=U(()=>{let w=m[y],_=In(w).sub(w),N=b[0].mul(w).add(d[0].mul(_)),T=d.map((E,M)=>b[1][M].mul(w).add(E.mul(_)));return{output:N,newStates:T}});h=x.output,d=x.newStates}o&&u.push(h)}let A;return o&&(A=Sn(u,1)),[h,A,d]})}var Mr=class extends Xe{constructor(e){super(e);let t;if(e.cell==null)throw new W("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new Gp({cells:e.cell}):t=e.cell,t.stateSize==null)throw new W("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new Vt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return xr(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){py(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],r;if(this.returnSequences?r=[e[0],e[1],n]:r=[e[0],n],this.returnState){let a=[];for(let s of t)a.push([e[0],s]);return[r].concat(a)}else return r}computeMask(e,t){return U(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let r=this.states.map(a=>null);return[n].concat(r)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;n<e;++n)t.push(null);return t}else return this.states_}set states(e){this.states_=e}build(e){let t=null;if(this.numConstants!=null)throw new De("Constants support is not implemented in RNN yet.");py(e)&&(e=e[0]),e=e;let n=this.stateful?e[0]:null,r=e.slice(2);this.inputSpec[0]=new Vt({shape:[n,null,...r]});let a=[e[0]].concat(e.slice(2));if(t!=null)throw new De("Constants support is not implemented in RNN yet.");this.cell.build(a);let s;if(Array.isArray(this.cell.stateSize)?s=this.cell.stateSize:s=[this.cell.stateSize],this.stateSpec!=null){if(!k.arraysEqual(this.stateSpec.map(i=>i.shape[i.shape.length-1]),s))throw new W(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=s.map(i=>new Vt({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){U(()=>{if(!this.stateful)throw new aa("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new W("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>Ct([n,r])):this.states_=[Ct([n,this.cell.stateSize])];else if(e==null)Fe(this.states_),this.keptStates!=null&&(Fe(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>Ct([n,r])):this.states_[0]=Ct([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new W(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):Fe(this.states_);for(let r=0;r<this.states_.length;++r){let a=e[r],s=Array.isArray(this.cell.stateSize)?this.cell.stateSize[r]:this.cell.stateSize,i=[n,s];if(!k.arraysEqual(a.shape,i))throw new W(`State ${r} is incompatible with layer ${this.name}: expected shape=${i}, received shape=${a.shape}`);this.states_[r]=a}}this.states_=this.states_.map(r=>Bt(r.clone()))})}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=l7(e,n,r,this.numConstants);e=a.inputs,n=a.initialState,r=a.constants;let s=[],i=[];if(n!=null){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let o of n)this.stateSpec.push(new Vt({shape:o.shape}));i=i.concat(this.stateSpec)}if(r!=null&&(t.constants=r,s=s.concat(r),this.numConstants=r.length),s[0]instanceof fr){let o=[e].concat(s),l=this.inputSpec.concat(i),c=this.inputSpec;this.inputSpec=l;let u=super.apply(o,t);return this.inputSpec=c,u}else return super.apply(e,t)}call(e,t){return U(()=>{let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;e=Pe(e),a==null&&(this.stateful?a=this.states_:a=this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==s)throw new W(`RNN Layer has ${s} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:r},o=u7((d,p)=>{let f=this.cell.call([d].concat(p),i);return[f[0],f.slice(1)]},e,a,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],c=o[1],u=o[2];this.stateful&&this.resetStates(u,r);let h=this.returnSequences?c:l;return this.returnState?[h].concat(u):h})}getInitialState(e){return U(()=>{let t=Ct(e.shape);return t=Te(t,[1,2]),t=bc(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?QA(t,[1,n]):t):this.cell.stateSize>1?[QA(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===Mr.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let r=t.cell,a=wr(r,n);return new e(Object.assign(t,{cell:a}))}};Mr.className="RNN";re.registerClass(Mr);var Ic=class extends Xe{},qp=class extends Ic{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,jt(this.units,"units"),this.activation=Pa(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=gt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=gt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=gt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=xt(e.kernelRegularizer),this.recurrentRegularizer=xt(e.recurrentRegularizer),this.biasRegularizer=xt(e.biasRegularizer),this.kernelConstraint=Lt(e.kernelConstraint),this.recurrentConstraint=Lt(e.recurrentConstraint),this.biasConstraint=Lt(e.biasConstraint),this.dropout=Nl([1,Da([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,Da([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=dt(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return U(()=>{if(e=e,e.length!==2)throw new W(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=La({ones:()=>In(e),rate:this.dropout,training:r})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=La({ones:()=>In(n),rate:this.recurrentDropout,training:r}));let a,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?a=Br(L(e,s),this.kernel.read()):a=Br(e,this.kernel.read()),this.bias!=null&&(a=Vr(a,this.bias.read())),i!=null&&(n=L(n,i));let o=oe(a,Br(n,this.recurrentKernel.read()));return this.activation!=null&&(o=this.activation.apply(o)),[o,o]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:za(this.activation),useBias:this.useBias,kernelInitializer:kt(this.kernelInitializer),recurrentInitializer:kt(this.recurrentInitializer),biasInitializer:kt(this.biasInitializer),kernelRegularizer:pt(this.kernelRegularizer),recurrentRegularizer:pt(this.recurrentRegularizer),biasRegularizer:pt(this.biasRegularizer),activityRegularizer:pt(this.activityRegularizer),kernelConstraint:Pt(this.kernelConstraint),recurrentConstraint:Pt(this.recurrentConstraint),biasConstraint:Pt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};qp.className="SimpleRNNCell";re.registerClass(qp);var Hy=class extends Mr{constructor(e){e.cell=new qp(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&(Fe(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Fe(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return new e(t)}};Hy.className="SimpleRNN";re.registerClass(Hy);var Xp=class extends Ic{constructor(e){super(e);if(this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new W("GRUCell does not support reset_after parameter set to true.");this.units=e.units,jt(this.units,"units"),this.activation=Pa(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Pa(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=gt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=gt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=gt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=xt(e.kernelRegularizer),this.recurrentRegularizer=xt(e.recurrentRegularizer),this.biasRegularizer=xt(e.biasRegularizer),this.kernelConstraint=Lt(e.kernelConstraint),this.recurrentConstraint=Lt(e.recurrentConstraint),this.biasConstraint=Lt(e.biasConstraint),this.dropout=Nl([1,Da([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,Da([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=dt(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return U(()=>{if(e=e,e.length!==2)throw new W(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,r=e[1];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=La({ones:()=>In(e),rate:this.dropout,training:n,count:3})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=La({ones:()=>In(r),rate:this.recurrentDropout,training:n,count:3}));let a=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0<this.dropout&&this.dropout<1&&(e=L(e,a[0]));let c=Br(e,this.kernel.read());this.useBias&&(c=Vr(c,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(r=L(r,s[0]));let u=this.recurrentKernel.read(),[h,d]=an(u,[2*this.units,this.units],u.rank-1),p=Br(r,h),[f,m,A]=an(c,3,c.rank-1),[y,g]=an(p,2,p.rank-1);i=this.recurrentActivation.apply(oe(f,y)),o=this.recurrentActivation.apply(oe(m,g));let b=Br(L(o,r),d);l=this.activation.apply(oe(A,b));let x=oe(L(i,r),L(oe(1,_t(i)),l));return[x,x]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:za(this.activation),recurrentActivation:za(this.recurrentActivation),useBias:this.useBias,kernelInitializer:kt(this.kernelInitializer),recurrentInitializer:kt(this.recurrentInitializer),biasInitializer:kt(this.biasInitializer),kernelRegularizer:pt(this.kernelRegularizer),recurrentRegularizer:pt(this.recurrentRegularizer),biasRegularizer:pt(this.biasRegularizer),activityRegularizer:pt(this.activityRegularizer),kernelConstraint:Pt(this.kernelConstraint),recurrentConstraint:Pt(this.recurrentConstraint),biasConstraint:Pt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign({},e,t)}};Xp.className="GRUCell";re.registerClass(Xp);var jy=class extends Mr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Xp(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&(Fe(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Fe(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};jy.className="GRU";re.registerClass(jy);var Mc=class extends Ic{constructor(e){super(e);this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,jt(this.units,"units"),this.activation=Pa(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=Pa(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=gt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=gt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=gt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=xt(e.kernelRegularizer),this.recurrentRegularizer=xt(e.recurrentRegularizer),this.biasRegularizer=xt(e.biasRegularizer),this.kernelConstraint=Lt(e.kernelConstraint),this.recurrentConstraint=Lt(e.recurrentConstraint),this.biasConstraint=Lt(e.biasConstraint),this.dropout=Nl([1,Da([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,Da([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=dt(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let r;if(this.useBias){if(this.unitForgetBias){let a=this.biasInitializer,s=this.units;r=new(t=class extends ir{apply(i,o){let l=a.apply([s]),c=new vp().apply([s]),u=a.apply([s*2]);return o3(o3(l,c),u)}},t.className="CustomInit",t)}else r=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,r,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return U(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new W(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],a=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=La({ones:()=>In(e),rate:this.dropout,training:n,count:4})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=La({ones:()=>In(r),rate:this.recurrentDropout,training:n,count:4}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,c,u;0<this.dropout&&this.dropout<1&&(e=L(e,s[0]));let h=Br(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(r=L(r,i[0])),h=oe(h,Br(r,this.recurrentKernel.read())),this.useBias&&(h=Vr(h,this.bias.read()));let[d,p,f,m]=an(h,4,h.rank-1);o=this.recurrentActivation.apply(d),l=this.recurrentActivation.apply(p),c=oe(L(l,a),L(o,this.activation.apply(f))),u=this.recurrentActivation.apply(m);let A=L(u,this.activation.apply(c));return[A,A,c]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:za(this.activation),recurrentActivation:za(this.recurrentActivation),useBias:this.useBias,kernelInitializer:kt(this.kernelInitializer),recurrentInitializer:kt(this.recurrentInitializer),biasInitializer:kt(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:pt(this.kernelRegularizer),recurrentRegularizer:pt(this.recurrentRegularizer),biasRegularizer:pt(this.biasRegularizer),activityRegularizer:pt(this.activityRegularizer),kernelConstraint:Pt(this.kernelConstraint),recurrentConstraint:Pt(this.recurrentConstraint),biasConstraint:Pt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign({},e,t)}};Mc.className="LSTMCell";re.registerClass(Mc);var Gy=class extends Mr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Mc(e),super(e)}call(e,t){return U(()=>{this.cell.dropoutMask!=null&&(Fe(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Fe(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Gy.className="LSTM";re.registerClass(Gy);var Gp=class extends Ic{constructor(e){super(e);this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return U(()=>{e=e;let n=e.slice(1),r=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?r.push(n.splice(0,i.stateSize.length)):r.push(n.splice(0,1));r.reverse();let a=[],s;for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=r[i],i===0?s=[e[0]].concat(n):s=[s[0]].concat(n),s=o.call(s,t),a.push(s.slice(1))}n=[];for(let i of a.slice().reverse())n.push(...i);return[s[0]].concat(n)})}build(e){py(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,r)=>{mi(`RNNCell_${r}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=r=>({className:r.getClassName(),config:r.getConfig()}),n={cells:this.cells.map(t)};return Object.assign({},e,n)}static fromConfig(e,t,n={}){let r=[];for(let a of t.cells)r.push(wr(a,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return fy(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,a=e.splice(r);for(let s=0;s<n.weights.length;++s)t.push([n.weights[s],a[s]])}my(t)}};Gp.className="StackedRNNCells";re.registerClass(Gp);function La(e){let{ones:t,rate:n,training:r=!1,count:a=1}=e,s=()=>u3(t(),n),i=()=>kc(s,t,r);return!a||a<=1?Bt(i().clone()):Array(a).fill(void 0).map(i).map(o=>Bt(o.clone()))}var wte=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n},c7=class extends Mr{constructor(e){if(e.unroll)throw new De("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new De("It is not possible at the moment to stack convolutional cells.");super(e);this.inputSpec=[new Vt({ndim:5})]}call(e,t){return U(()=>{if(this.cell.dropoutMask!=null&&(Fe(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Fe(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new W("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,r=t==null?null:t.training,a=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return U(()=>{let{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)],s=Ct(a);return Array.isArray(t)?Array(t.length).fill(s):[s]})}resetStates(e,t=!1){U(()=>{if(!this.stateful)throw new aa("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)];if(n[0]==null)throw new W("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ct(a)):this.states_=[Ct(a)];else if(e==null)Fe(this.states_),this.keptStates!=null&&(Fe(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>Ct(a)):this.states_[0]=Ct(a);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new W(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):Fe(this.states_);for(let s=0;s<this.states_.length;++s){let i=e[s],o=a;if(!k.arraysEqual(i.shape,o))throw new W(`State ${s} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${i.shape}`);this.states_[s]=i}}this.states_=this.states_.map(s=>Bt(s.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:a,strides:s,dilationRate:i}=this.cell,o=t==="channelsFirst",l=e[o?3:2],c=e[o?4:3],u=_r(l,r[0],a,s[0],i[0]),h=_r(c,r[1],a,s[1],i[1]);return[...e.slice(0,2),...o?[n,u,h]:[u,h,n]]}};c7.className="ConvRNN2D";var Kp=class extends Mc{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:a,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t}));this.filters=t,jt(this.filters,"filters"),this.kernelSize=Cl(n,2,"kernelSize"),this.kernelSize.forEach(o=>jt(o,"kernelSize")),this.strides=Cl(r||1,2,"strides"),this.strides.forEach(o=>jt(o,"strides")),this.padding=a||"valid",Un(this.padding),this.dataFormat=s||"channelsLast",Tt(this.dataFormat),this.dilationRate=Cl(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>jt(o,"dilationRate"))}build(e){var t;e=dt(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new W(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],a=4,s=this.kernelSize.concat([r,this.filters*a]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*a]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let o;if(this.unitForgetBias){let l=this.biasInitializer,c=this.filters;o=new(t=class extends ir{apply(u,h){let d=l.apply([c]),p=Cr([c]),f=l.apply([c*2]);return ty([d,p,f])}},t.className="CustomInit",t)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*a],null,o,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return U(()=>{if(e.length!==3)throw new W(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],a=e[1],s=e[2],i=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=La({ones:()=>In(r),rate:this.dropout,training:n,count:i}));let o=this.dropoutMask,l=(J,ae,Y)=>!ae||!ae[Y]?J:L(ae[Y],J),c=l(r,o,0),u=l(r,o,1),h=l(r,o,2),d=l(r,o,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=La({ones:()=>In(a),rate:this.recurrentDropout,training:n,count:i}));let p=this.recurrentDropoutMask,f=l(a,p,0),m=l(a,p,1),A=l(a,p,2),y=l(a,p,3),g=3,[b,x,w,_]=an(this.kernel.read(),i,g),[N,T,E,M]=this.useBias?an(this.bias.read(),i):[null,null,null,null];c=this.inputConv(c,b,N,this.padding),u=this.inputConv(u,x,T,this.padding),h=this.inputConv(h,w,E,this.padding),d=this.inputConv(d,_,M,this.padding);let[z,P,B,G]=an(this.recurrentKernel.read(),i,g);f=this.recurrentConv(f,z),m=this.recurrentConv(m,P),A=this.recurrentConv(A,B),y=this.recurrentConv(y,G);let V=this.recurrentActivation.apply(oe(c,f)),K=this.recurrentActivation.apply(oe(u,m)),X=oe(L(K,s),L(V,this.activation.apply(oe(h,A)))),ee=L(this.recurrentActivation.apply(oe(d,y)),this.activation.apply(X));return[ee,ee,X]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=wte(e,["units"]),r={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,r)}inputConv(e,t,n,r){let a=Kr(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Vr(a,n,this.dataFormat):a}recurrentConv(e,t){return Kr(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Kp.className="ConvLSTM2DCell";re.registerClass(Kp);var qy=class extends c7{constructor(e){let t=new Kp(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};qy.className="ConvLSTM2D";re.registerClass(qy);var Zp=class extends Xe{constructor(e){super(e);this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let r=0;r<this.noiseShape.length;++r)n.push(this.noiseShape[r]==null?t[r]:this.noiseShape[r]);return n}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);if(0<this.rate&&this.rate<1){let r=t.training==null?!1:t.training,a=this.getNoiseShape(n);return kc(()=>u3(n,this.rate,a,this.seed),()=>n,r)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};Zp.className="Dropout";re.registerClass(Zp);var Xy=class extends Zp{constructor(e){super(e);this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};Xy.className="SpatialDropout1D";re.registerClass(Xy);var Ky=class extends Xe{constructor(e){super(e);if(this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,jt(this.units,"units"),this.activation=Pa(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=gt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=gt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Lt(e.kernelConstraint),this.biasConstraint=Lt(e.biasConstraint),this.kernelRegularizer=xt(e.kernelRegularizer),this.biasRegularizer=xt(e.biasRegularizer),this.activityRegularizer=xt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=dt(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=dt(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e),r=Yb(this.activation.getClassName()),a;return r!=null?a=Br(n,this.kernel.read(),r,this.bias?this.bias.read():null):(a=Br(n,this.kernel.read()),this.bias!=null&&(a=Vr(a,this.bias.read())),this.activation!=null&&(a=this.activation.apply(a))),a})}getConfig(){let e={units:this.units,activation:za(this.activation),useBias:this.useBias,kernelInitializer:kt(this.kernelInitializer),biasInitializer:kt(this.biasInitializer),kernelRegularizer:pt(this.kernelRegularizer),biasRegularizer:pt(this.biasRegularizer),activityRegularizer:pt(this.activityRegularizer),kernelConstraint:Pt(this.kernelConstraint),biasConstraint:Pt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Ky.className="Dense";re.registerClass(Ky);var Zy=class extends Xe{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=dt(e);for(let t of e.slice(1))if(t==null)throw new W(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],$a(e,1)]}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let a=2;a<n.rank;++a)r.push(a);r.push(1),n=n.transpose(r)}return KY(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Zy.className="Flatten";re.registerClass(Zy);var Jy=class extends Xe{constructor(e){super(e);this.supportsMasking=!0,this.activation=Pa(e.activation)}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);return this.activation.apply(n)})}getConfig(){let e={activation:za(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Jy.className="Activation";re.registerClass(Jy);var Yy=class extends Xe{constructor(e){super(e);this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return U(()=>(e=Pe(e),qY(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};Yy.className="RepeatVector";re.registerClass(Yy);var Qy=class extends Xe{constructor(e){super(e);this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",r=t.slice(),a=1,s=null;for(let o=0;o<r.length;++o){let l=r[o];if(this.isUnknown(l))if(s===null)s=o;else throw new W("Can only specifiy one unknown dimension.");else a*=l}let i=$a(e);if(s!==null){if(a===0||i%a!=0)throw new W(n);r[s]=i/a}else if(i!==a)throw new W(n);return r}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e),r=n.shape,a=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return n.reshape(a)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};Qy.className="Reshape";re.registerClass(Qy);var eg=class extends Xe{constructor(e){super(e);if(e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=xr(1,e.dims.length+1);if(!k.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new Vt({ndim:this.dims.length+1})]}computeOutputShape(e){e=dt(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return at(Pe(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};eg.className="Permute";re.registerClass(eg);var tg=class extends Xe{constructor(e){super(e==null?{}:e);this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=Pe(e),r=-1;return ku(qs(n,this.maskValue),r)}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e),r=-1,a=!0,s=ku(qs(n,this.maskValue),r,a);return n.mul(s.asType(n.dtype))})}};tg.className="Masking";re.registerClass(tg);var ng=class extends Xe{constructor(e){super(e);if(this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(mt(e.inputLength))}this.inputDim=e.inputDim,jt(this.inputDim,"inputDim"),this.outputDim=e.outputDim,jt(this.outputDim,"outputDim"),this.embeddingsInitializer=gt(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=xt(e.embeddingsRegularizer),this.activityRegularizer=xt(e.activityRegularizer),this.embeddingsConstraint=Lt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return U(()=>this.maskZero?(e=Pe(e),qs(e,He(e))):null)}computeOutputShape(e){if(e=dt(e),this.inputLength==null)return[...e,this.outputDim];let t=mt(this.inputLength);if(t.length!==e.length-1)throw new W(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r<t.length;++r){let a=t[r],s=e[r+1];if(a!=null&&s!=null&&a!==s)throw new W(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);a==null&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);return n.dtype!=="int32"&&(n=_c(n,"int32")),l3(this.embeddings.read(),n.as1D()).reshape(dt(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:kt(this.embeddingsInitializer),embeddingsRegularizer:pt(this.embeddingsRegularizer),activityRegularizer:pt(this.activityRegularizer),embeddingsConstraint:Pt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};ng.className="Embedding";re.registerClass(ng);var wi=class extends Xe{constructor(e){super(e||{});this.supportsMasking=!0}mergeFunction(e){throw new De}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let r=0;r<t.length;++r){let a=e[e.length-t.length+r],s=t[r];if(a==null||s==null||a<0||s<0)n.push(null);else if(a===1)n.push(s);else if(s===1)n.push(a);else{if(a!==s)throw new W("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(a)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[dt(e)]),e=e,e.length<2)throw new W(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let a of e)a!=null&&a[0]!==null&&t.push(a[0]);if(t=Ma(t),t.length>1)throw new W(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let a=1;a<e.length;++a){let s=e[a]==null?null:e[a].slice(1);n=this.computeElementwiseOpOutputShape(n,s)}let r=e.map(a=>a.length);e.indexOf(null)===-1&&Ma(r).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return U(()=>{if(e=e,this.reshapeRequired){let n=[],r=e.map(a=>a.rank);if(r.indexOf(null)===-1){let a=Da(r);for(let s of e){let i=s.rank;for(let o=0;o<a-i;++o)s=bc(s,1);n.push(s)}return this.mergeFunction(n)}else{let a=!1;for(let o of e){let l=o.rank;if(l==null){let c=o.shape,u=c[0],h=c.slice(1).concat([u]),d=o.reshape([u].concat($a(c.slice(1))));d=at(d,[1,0]),d=d.reshape(h),n.push(d),a=!0}else if(l>1){let c=xr(1,l).concat([0]);n.push(at(o,c)),a=!0}else n.push(o)}let s=this.mergeFunction(n),i=s.rank;if(a){if(i==null){let o=s.shape,l=o.length,c=o[l-1],u=[c].concat(o.slice(0,o.length-1));s=at(s.reshape([-1,c]),[1,0]).reshape(u)}else if(i>1){let o=[i-1].concat(xr(0,i-1));s=at(s,o)}}return s}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let r=1;r<e.length;++r){let a=e[r]==null?null:e[r].slice(1);t=this.computeElementwiseOpOutputShape(t,a)}let n=[];for(let r of e)r!=null&&r[0]!==null&&n.push(r[0]);return n=Ma(n),n.length===1?t=n.concat(t):t=[null].concat(t),t}computeMask(e,t){return U(()=>{if(t==null)return null;if(!Array.isArray(t))throw new W("`mask` should be an Array");if(!Array.isArray(e))throw new W("`inputs` should be an Array");if(t.length!==e.length)throw new W(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(r=>r==null))return null;t=t.map(r=>r==null?r:vn(r,0));let n=t[0];for(let r=1;r<t.length-1;++r)n=er(n,t[r]);return n})}},rg=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=oe(t,e[n]);return t})}};rg.className="Add";re.registerClass(rg);var ag=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=L(t,e[n]);return t})}};ag.className="Multiply";re.registerClass(ag);var sg=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=oe(t,e[n]);return L(1/e.length,t)})}};sg.className="Average";re.registerClass(sg);var ig=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Er(t,e[n]);return t})}};ig.className="Maximum";re.registerClass(ig);var og=class extends wi{constructor(e){super(e)}mergeFunction(e){return U(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Xo(t,e[n]);return t})}};og.className="Minimum";re.registerClass(og);var lg=class extends wi{constructor(e){super(e);this.DEFAULT_AXIS=-1,e==null&&(e={}),this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!(Array.isArray(e)&&Array.isArray(e[0]))||e.length===1)throw new W("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let r of e)if(r!=null){t=!1;break}if(t)return;let n=[];for(let r=0;r<e.length;++r){let a=e[r].slice();a.splice(this.axis,1);let s=!1;for(let i of n)if(k.arraysEqual(i,a)){s=!0;break}s||n.push(a)}if(n.length>1)throw new W("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return U(()=>ty(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new W("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(let a of t.slice(1)){if(n[r]==null||a[r]==null){n[r]=null;break}n[r]+=a[r]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new W("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new W("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new W(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return U(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let r=[];for(let s=0;s<e.length;++s)t[s]==null?r.push(In(e[s]).asType("bool")):t[s].rank<e[s].rank?r.push(vn(t[s],-1)):r.push(t[s]);let a=ct(r,this.axis);return Qh(a,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};lg.className="Concatenate";re.registerClass(lg);function $c(e,t){for(;e<0;)e+=t;return e}function _te(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new De("batchDot is not implemented for tensors of 4D or higher rank yet");if(k.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),k.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new De("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,a=t.shape.length;n==null&&(n=[r-1,a-2]);let s=n;return U(()=>{let i;if(r>a){i=r-a;let l=[];for(let c=0;c<i;++c)l.push(1);t=t.reshape(t.shape.concat(l))}else if(a>r){i=a-r;let l=[];for(let c=0;c<i;++c)l.push(1);e=e.reshape(e.shape.concat(l))}else i=0;let o;if(e.shape.length===2&&t.shape.length===2)s[0]===s[1]?o=e.mul(t).sum(s[0]):o=e.transpose([1,0]).mul(t).sum(s[1]);else{let l=s[0]!==e.shape.length-1,c=s[1]===t.shape.length-1;o=e.matMul(t,l,c)}if(i>0){let l;r>a?l=r+a-3:l=r-1;let c=[];for(let u=l;u<l+i;++u)c.push(u);o=o.squeeze(c)}return o.shape.length===1&&(o=o.expandDims(1)),o})}var ug=class extends wi{constructor(e){super(e);this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){k.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new De("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new W(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new W(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],r;return Array.isArray(this.axes)?r=this.axes.map((a,s)=>$c(a,e[s].shape.length)):r=[$c(this.axes,t.shape.length),$c(this.axes,n.shape.length)],this.normalize&&(t=Dp(t,r[0]),n=Dp(n,r[1])),_te(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[$c(this.axes,e.length),$c(this.axes,t.length)],n}computeOutputShape(e){k.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new De("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);let a=t.concat(n);return a.length===1&&a.push(1),a}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};ug.className="Dot";re.registerClass(ug);var cg=class extends Xe{constructor(e){super(e);this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);return kc(()=>bp(n.shape,0,this.stddev).add(n),()=>n,t.training||!1)})}};cg.className="GaussianNoise";re.registerClass(cg);var hg=class extends Xe{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return U(()=>{this.invokeCallHook(e,t);let n=Pe(e);return this.rate>0&&this.rate<1?kc(()=>{let r=Math.sqrt(this.rate/(1-this.rate));return n.mul(bp(n.shape,1,r))},()=>n,t.training||!1):n})}};hg.className="GaussianDropout";re.registerClass(hg);var dg=class extends Xe{constructor(e){super(e);this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Pe(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return U(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return kc(()=>{let r=Pe(e),a=1.6732632423543772,s=1.0507009873554805,i=-a*s,o=_a(Ko(n),this.rate);o=_c(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,c=-l*i*this.rate;return r.mul(o).add(o.add(-1).mul(i)).mul(l).add(c)},()=>Pe(e),t.training||!1)}return e})}};dg.className="AlphaDropout";re.registerClass(dg);function Dc(e,t,n,r,a,s=.001){let i;if(e.rank===2)i=X2(e,t,n,r,a,s);else if(e.rank===3)i=K2(e,t,n,r,a,s);else if(e.rank===4)i=Z2(e,t,n,r,a,s);else throw new De(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function bte(e,t,n,r,a=.001){return U(()=>{let s=cd(e,r),i=s.mean,o=s.variance;return[Dc(e,i,o,n,t,a),i,o]})}function vte(e,t,n,r,a=.001){return U(()=>{let s=cd(e,r),i=s.mean,o=s.variance,l=[];for(let p of xr(0,e.rank))r.indexOf(p)!==-1?l.push(1):l.push(e.shape[p]);let c=i.reshape(l),u=o.reshape(l),h=t==null?null:t.reshape(l),d=n==null?null:n.reshape(l);return[Dc(e,c,u,d,h,a),i,o]})}function kte(e,t,n,r,a=.001){return k.arraysEqual(r.slice().sort(),xr(0,e.rank-1))?bte(e,t,n,r,a):vte(e,t,n,r,a)}var pg=class extends Xe{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=gt(e.betaInitializer||"zeros"),this.gammaInitializer=gt(e.gammaInitializer||"ones"),this.movingMeanInitializer=gt(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=gt(e.movingVarianceInitializer||"ones"),this.betaConstraint=Lt(e.betaConstraint),this.gammaConstraint=Lt(e.gammaConstraint),this.betaRegularizer=xt(e.betaRegularizer),this.gammaRegularizer=xt(e.gammaRegularizer)}build(e){e=dt(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new W(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Vt({ndim:e.length,axes:{[t]:n}})];let r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return U(()=>{let n=t.training==null?!1:t.training,r=Pe(e),a=r.shape,s=a.length,i=xr(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=di(1,s);l[o]=a[o];let c=i.slice();c.sort();let u=!k.arraysEqual(c,xr(0,s).slice(0,s-1)),h=()=>{if(u){let A=this.movingMean.read().reshape(l),y=this.movingVariance.read().reshape(l),g=this.center?this.beta.read().reshape(l):null,b=this.scale?this.gamma.read().reshape(l):null;return Dc(r,A,y,g,b,this.epsilon)}else return Dc(r,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return h();let[d,p,f]=kte(r,this.gamma.read(),this.beta.read(),i,this.epsilon),m=(A,y,g)=>{U(()=>{let b=1-g,x=A.read(),w=x.sub(y).mul(b);A.write(x.sub(w))})};return(()=>{m(this.movingMean,p,this.momentum),m(this.movingVariance,f,this.momentum)})(),d})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:kt(this.betaInitializer),gammaInitializer:kt(this.gammaInitializer),movingMeanInitializer:kt(this.movingMeanInitializer),movingVarianceInitializer:kt(this.movingVarianceInitializer),betaRegularizer:pt(this.betaRegularizer),gammaRegularizer:pt(this.gammaRegularizer),betaConstraint:Pt(this.betaConstraint),gammaConstraint:Pt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};pg.className="BatchNormalization";re.registerClass(pg);var fg=class extends Xe{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=gt(e.betaInitializer||"zeros"),this.gammaInitializer=gt(e.gammaInitializer||"ones"),this.betaRegularizer=xt(e.betaRegularizer),this.gammaRegularizer=xt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=dt(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let a=0;a<this.axis.length;++a)this.axis[a]<0&&(this.axis[a]+=t);for(let a of this.axis)if(a<0||a>=t)throw new Error(`Invalid axis: ${a}`);if(this.axis.length!==Ma(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(a=>e[a]),r=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,r):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,r):this.beta=null,this.built=!0}call(e,t){let n=Pe(e),r=n.shape,a=r.length;return U(()=>{let s=!0,{mean:i,variance:o}=cd(n,this.axis,s),l=di(1,a);for(let f of this.axis)l[f]=r[f];let c=f=>f!=null&&f.shape.length!==a&&this.axis!==[a-1]?f.reshape(l):f,u=c(this.gamma.read()),h=c(this.beta.read()),d=[],p=[];for(let f=0;f<a;++f)this.axis.indexOf(f)!==-1?(d.push(r[f]),p.push(1)):(d.push(1),p.push(r[f]));return i=i.tile(d),o=o.tile(d),u=u.tile(p),h=h.tile(p),Dc(n,i,o,h,u,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:kt(this.betaInitializer),gammaInitializer:kt(this.gammaInitializer),betaRegularizer:pt(this.betaRegularizer),gammaRegularizer:pt(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};fg.className="LayerNormalization";re.registerClass(fg);function Ite(e,t,n){return U(()=>{if(e.rank!==4)throw new W(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new W("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=yr()),n!=="channelsLast"&&n!=="channelsFirst")throw new W(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return n==="channelsFirst"?r=[[0,0],[0,0],t[0],t[1]]:r=[[0,0],t[0],t[1],[0,0]],Zr(e,r)})}var mg=class extends Xe{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?yr():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new W(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new W(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new W(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Vt({ndim:4})]}computeOutputShape(e){e=dt(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return U(()=>Ite(Pe(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};mg.className="ZeroPadding2D";re.registerClass(mg);function Jp(e,t,n,r,a,s){return U(()=>{Tt(a),t3(s),Un(r),n==null&&(n=[1,1]),r==null&&(r="valid"),a==null&&(a=yr()),s==null&&(s="max"),e=zy(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=Mu(e,t,n,o):i=Nu(e,t,n,o),a==="channelsFirst"&&(i=at(i,[0,3,1,2])),i})}function h7(e,t,n,r,a,s){return U(()=>{Tt(a),t3(s),Un(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),a==null&&(a=yr()),s==null&&(s="max"),e=s7(e,a);let i,o=r==="same"?"same":"valid";return s==="max"?i=Qf(e,t,n,o):i=Vf(e,t,n,o),a==="channelsFirst"&&(i=at(i,[0,4,1,2,3])),i})}var d7=class extends Xe{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new W(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(jt(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new W(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);jt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,Un(this.padding),this.inputSpec=[new Vt({ndim:3})]}computeOutputShape(e){e=dt(e);let t=_r(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return U(()=>{this.invokeCallHook(e,t),e=bc(Pe(e),2);let n=this.poolingFunction(Pe(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return ba(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},Ag=class extends d7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),Jp(e,t,n,r,a,"max")}};Ag.className="MaxPooling1D";re.registerClass(Ag);var yg=class extends d7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),Jp(e,t,n,r,a,"avg")}};yg.className="AveragePooling1D";re.registerClass(yg);var p7=class extends Xe{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new W(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];jt(this.poolSize,"poolSize"),jt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Tt(this.dataFormat),Un(this.padding),this.inputSpec=[new Vt({ndim:4})]}computeOutputShape(e){e=dt(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=_r(t,this.poolSize[0],this.padding,this.strides[0]),n=_r(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return U(()=>(this.invokeCallHook(e,t),this.poolingFunction(Pe(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},gg=class extends p7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),Jp(e,t,n,r,a,"max")}};gg.className="MaxPooling2D";re.registerClass(gg);var xg=class extends p7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),Jp(e,t,n,r,a,"avg")}};xg.className="AveragePooling2D";re.registerClass(xg);var f7=class extends Xe{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new W(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];jt(this.poolSize,"poolSize"),jt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Tt(this.dataFormat),Un(this.padding),this.inputSpec=[new Vt({ndim:5})]}computeOutputShape(e){e=dt(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=_r(t,this.poolSize[0],this.padding,this.strides[0]),n=_r(n,this.poolSize[1],this.padding,this.strides[1]),r=_r(r,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return U(()=>(this.invokeCallHook(e,t),this.poolingFunction(Pe(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},wg=class extends f7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),h7(e,t,n,r,a,"max")}};wg.className="MaxPooling3D";re.registerClass(wg);var _g=class extends f7{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Tt(a),Un(r),h7(e,t,n,r,a,"avg")}};_g.className="AveragePooling3D";re.registerClass(_g);var m7=class extends Xe{constructor(e){super(e);this.inputSpec=[new Vt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new De}},bg=class extends m7{constructor(e){super(e||{})}call(e,t){return U(()=>{let n=Pe(e);return bt(n,1)})}};bg.className="GlobalAveragePooling1D";re.registerClass(bg);var vg=class extends m7{constructor(e){super(e||{})}call(e,t){return U(()=>{let n=Pe(e);return Ln(n,1)})}};vg.className="GlobalMaxPooling1D";re.registerClass(vg);var A7=class extends Xe{constructor(e){super(e);this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Tt(this.dataFormat),this.inputSpec=[new Vt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new De}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},kg=class extends A7{call(e,t){return U(()=>{let n=Pe(e);return this.dataFormat==="channelsLast"?bt(n,[1,2]):bt(n,[2,3])})}};kg.className="GlobalAveragePooling2D";re.registerClass(kg);var Ig=class extends A7{call(e,t){return U(()=>{let n=Pe(e);return this.dataFormat==="channelsLast"?Ln(n,[1,2]):Ln(n,[2,3])})}};Ig.className="GlobalMaxPooling2D";re.registerClass(Ig);var y7=class extends Xe{constructor(e){super(e);this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let r=t.layer,a=wr(r,n);delete t.layer;let s={layer:a};return Object.assign(s,t),new e(s)}},Ng=class extends y7{constructor(e){super(e);this.supportsMasking=!0}build(e){if(e=dt(e),e.length<3)throw new W(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=dt(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return U(()=>(e=Pe(e),u7((n,r)=>[Pe(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};Ng.className="TimeDistributed";re.registerClass(Ng);function Nte(e){fi(VY,"BidirectionalMergeMode",e)}var Ste="concat",Sg=class extends y7{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=wr(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=wr(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?Ste:e.mergeMode,Nte(this.mergeMode),e.weights)throw new De("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,r,a;return this.returnState&&(a=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,r=[n]):this.mergeMode==null?r=[n,n.slice()]:r=[n],this.returnState?this.mergeMode==null?r.concat(a).concat(a.slice()):[n].concat(a).concat(a.slice()):yn(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let a=l7(e,n,r,this.numConstants);if(e=a.inputs,n=a.initialState,r=a.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&r==null)return super.apply(e,t);let s=[],i=[];if(n!=null){let l=n.length;if(l%2>0)throw new W("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let c=n.map(u=>new Vt({shape:u.shape}));this.forwardLayer.stateSpec=c.slice(0,l/2),this.backwardLayer.stateSpec=c.slice(l/2),i.push(...c)}if(r!=null)throw new De("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof fr;for(let l of s)if(l instanceof fr!==o)throw new W("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let l=[e].concat(s),c=this.inputSpec.concat(i),u=this.inputSpec;this.inputSpec=c;let h=super.apply(l,t);return this.inputSpec=u,h}else return super.apply(e,t)}call(e,t){return U(()=>{let n=t.initialState,r,a;if(n==null)r=this.forwardLayer.call(e,t),a=this.backwardLayer.call(e,t);else{let o=n.slice(0,n.length/2),l=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:o})),a=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let s;this.returnState&&(Array.isArray(r)&&(s=r.slice(1).concat(a.slice(1))),r=r[0],a=a[0]),this.returnSequences&&(a=Nn(a,1));let i;return this.mergeMode==="concat"?i=ty([r,a]):this.mergeMode==="sum"?i=oe(r,a):this.mergeMode==="ave"?i=L(.5,oe(r,a)):this.mergeMode==="mul"?i=L(r,a):this.mergeMode==null&&(i=[r,a]),this.returnState?this.mergeMode==null?i.concat(s):[i].concat(s):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){mi(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),mi(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let r=this.forwardLayer.states.map(a=>null);return Array.isArray(n)?n.concat(r).concat(r):[n].concat(r).concat(r)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=wr(t.layer);if(delete t.layer,t.numConstants!=null)throw new De("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};Sg.className="Bidirectional";re.registerClass(Sg);function aQ(e){return new Sl(e)}function sQ(e){return new $y(e)}function iQ(e){return new Ry(e)}function oQ(e){return new Fy(e)}function lQ(e){return new My(e)}function uQ(e){return new Oy(e)}function cQ(e){return new Dy(e)}function hQ(e){return new jp(e)}function dQ(e){return new Fc(e)}function pQ(e){return new Ly(e)}function fQ(e){return new Hp(e)}function mQ(e){return new Wy(e)}function AQ(e){return new By(e)}function yQ(e){return new Vy(e)}function gQ(e){return new Uy(e)}function xQ(e){return new Jy(e)}function wQ(e){return new Ky(e)}function _Q(e){return new Zp(e)}function bQ(e){return new Xy(e)}function vQ(e){return new Zy(e)}function kQ(e){return new Yy(e)}function IQ(e){return new Qy(e)}function NQ(e){return new eg(e)}function SQ(e){return new ng(e)}function TQ(e){return new rg(e)}function EQ(e){return new sg(e)}function CQ(e){return new lg(e)}function RQ(e){return new ig(e)}function FQ(e){return new og(e)}function MQ(e){return new ag(e)}function $Q(e){return new ug(e)}function DQ(e){return new pg(e)}function OQ(e){return new fg(e)}function zQ(e){return new mg(e)}function cy(e){return new yg(e)}function PQ(e){return cy(e)}function LQ(e){return cy(e)}function hy(e){return new xg(e)}function WQ(e){return hy(e)}function BQ(e){return hy(e)}function dy(e){return new _g(e)}function VQ(e){return dy(e)}function UQ(e){return dy(e)}function HQ(e){return new bg(e)}function jQ(e){return new kg(e)}function d3(e){return new vg(e)}function p3(e){return new Ig(e)}function f3(e){return new Ag(e)}function m3(e){return new gg(e)}function GQ(e){return new wg(e)}function qQ(e){return new jy(e)}function XQ(e){return new Xp(e)}function KQ(e){return new Gy(e)}function ZQ(e){return new Mc(e)}function JQ(e){return new Hy(e)}function YQ(e){return new qp(e)}function QQ(e){return new qy(e)}function eee(e){return new Kp(e)}function tee(e){return new Mr(e)}function nee(e){return new Gp(e)}function ree(e){return new Sg(e)}function aee(e){return new Ng(e)}var see=d3,iee=p3,oee=f3,lee=m3;function uee(e){return new cg(e)}function cee(e){return new hg(e)}function hee(e){return new dg(e)}function dee(e){return new tg(e)}var O0={};ze(O0,{MAPE:()=>Pte,MSE:()=>Bte,binaryAccuracy:()=>Tte,binaryCrossentropy:()=>Ete,categoricalAccuracy:()=>Rte,categoricalCrossentropy:()=>Fte,cosineProximity:()=>Dte,mape:()=>Lte,meanAbsoluteError:()=>Ote,meanAbsolutePercentageError:()=>zte,meanSquaredError:()=>Wte,mse:()=>Vte,precision:()=>Mte,recall:()=>$te,sparseCategoricalAccuracy:()=>Cte});function Tte(e,t){return gy(e,t)}function Ete(e,t){return N3(e,t)}function Cte(e,t){return S3(e,t)}function Rte(e,t){return xy(e,t)}function Fte(e,t){return wy(e,t)}function Mte(e,t){return I3(e,t)}function $te(e,t){return Ree(e,t)}function Dte(e,t){return Ay(e,t)}function Ote(e,t){return Op(e,t)}function zte(e,t){return El(e,t)}function Pte(e,t){return El(e,t)}function Lte(e,t){return El(e,t)}function Wte(e,t){return yi(e,t)}function Bte(e,t){return yi(e,t)}function Vte(e,t){return yi(e,t)}var z0={};ze(z0,{modelFromJSON:()=>hte});var P0={};ze(P0,{l1:()=>Hte,l1l2:()=>Ute,l2:()=>jte});function Ute(e){return new Cc(e)}function Hte(e){return mte(e)}function jte(e){return Ate(e)}var L0=class extends Tl{constructor(){super(...arguments);this.model=null}setModel(e){if(!(e instanceof Qr))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Yp(e,t){return e<t}function g7(e,t){return e>t}var W0=class extends L0{constructor(e){super();if(e==null&&(e={}),e.restoreBestWeights)throw new De("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=Yp:this.mode==="max"?this.monitorFunc=g7:this.monitor.indexOf("acc")!==-1?this.monitorFunc=g7:this.monitorFunc=Yp,this.monitorFunc===Yp&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Yp?Infinity:-Infinity}async onEpochEnd(e,t){await Oa(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function Gte(e){return new W0(e)}var H8={earlyStopping:Gte},br;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF"})(br||(br={}));var x7;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(x7||(x7={}));var Tg={};function j8(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};Tg[e]=n}function w7(e){return Tg[e]}function G8(e){delete Tg[e]}function I(e,t,n,r,a){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return xn(t.inputNames[s.inputIndexStart],n,r,a);if(s.type==="tensors")return t.inputNames.slice(o,l).map(h=>xn(h,n,r,a));let c=xn(t.inputNames.slice(o)[0],n,r,a),u=c.dataSync();return s.type==="number"?u[0]:k.toNestedArray(c.shape,u)}let i=t.attrParams[e];return i&&i.value}function xn(e,t,n,r){let[a,s]=Fn(e);if(r!=null){let o=r.getHashTableHandleByName(a);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[Qp(a,o)]);return i!==void 0?t[Qp(a,i)][s]:void 0}function qte(e,t,n){return t[Qp(e,n.currentContextId)]}function ia(e,t){let[n,r]=Fn(e);return[Qp(n,t&&t.currentContextId),r]}function Qp(e,t){return t?`${e}-${t}`:e}function Fn(e){let t=e.split(":");return t.length===1?[e,0]:[t[0],Number(t[t.length-1])]}function e1(e,t,n){let r=I("pad",e,t,n);if(r==="explicit"){r=I("explicitPaddings",e,t,n);let a=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)a[s][0]=r[s*2],a[s][1]=r[s*2+1];return a}return r}function oa(e){return e.kept?e:Nr(e)}var _7={};ze(_7,{json:()=>Xte});var Xte=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],b7={};ze(b7,{json:()=>Kte});var Kte=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],v7={};ze(v7,{json:()=>Zte});var Zte=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}],k7={};ze(k7,{json:()=>Jte});var Jte=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],I7={};ze(I7,{json:()=>Yte});var Yte=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],N7={};ze(N7,{json:()=>Qte});var Qte=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],S7={};ze(S7,{json:()=>ene});var ene=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],T7={};ze(T7,{json:()=>tne});var tne=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],E7={};ze(E7,{json:()=>nne});var nne=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]}],C7={};ze(C7,{json:()=>rne});var rne=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}],R7={};ze(R7,{json:()=>ane});var ane=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],F7={};ze(F7,{json:()=>sne});var sne=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],M7={};ze(M7,{json:()=>ine});var ine=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],$7={};ze($7,{json:()=>one});var one=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],D7={};ze(D7,{json:()=>lne});var lne=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],O7={};ze(O7,{json:()=>une});var une=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],z7={};ze(z7,{json:()=>cne});var cne=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]}],L7=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[_7,b7,v7,k7,I7,N7,S7,R7,C7,T7,F7,M7,$7,D7,O7,z7,E7],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,r)=>(n[r.tfOpName]=r,n),{})}transformGraph(e,t={}){let n=e.node,r=[],a=[],s=[],i=n.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?r.push(f[m.name]):m.op==="Const"?a.push(f[m.name]):(m.input==null||m.input.length===0)&&s.push(f[m.name]),f),{}),o=[],l=[],c={},u={};t!=null&&(c=this.mapSignatureEntries(t.inputs),u=this.mapSignatureEntries(t.outputs));let h=Object.keys(i);h.forEach(f=>{let m=i[f];m.inputNames.forEach(A=>{let[y]=ia(A);m.inputs.push(i[y]),i[y].children.push(m)})}),Object.keys(u).length===0?h.forEach(f=>{let m=i[f];m.children.length===0&&l.push(m)}):Object.keys(u).forEach(f=>{let[m]=ia(f),A=i[m];A!=null&&(A.signatureKey=u[f],l.push(A))}),Object.keys(c).length>0?Object.keys(c).forEach(f=>{let[m]=ia(f),A=i[m];A&&(A.signatureKey=c[f],o.push(A))}):o=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let p={nodes:i,inputs:o,outputs:l,weights:a,placeholders:r,signature:t,functions:d};return s.length>0&&(p.initNodes=s),p}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=w7(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(r=>r.startsWith("^")?r.substr(1):r),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((r,a)=>(r[a.name]={type:a.type,inputIndexStart:a.start,inputIndexEnd:a.end},r),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((r,a)=>{let s=a.type,i;switch(a.type){case"string":i=Eg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Eg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"string[]":i=zg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=zg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number":i=Rg(e.attr,a.tfName,a.defaultValue||0),i===void 0&&!!a.tfDeprecatedName&&(i=Rg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"number[]":i=Og(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Og(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool":i=Cg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Cg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"bool[]":i=Lg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Lg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape":i=Dg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Dg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"shape[]":i=Pg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Pg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype":i=Mg(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=Mg(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"dtype[]":i=$g(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=$g(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"func":i=P7(e.attr,a.tfName,a.defaultValue),i===void 0&&!!a.tfDeprecatedName&&(i=P7(e.attr,a.tfDeprecatedName,a.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${a.type} for op: ${e.op}`)}return r[a.name]={value:i,type:s},r},{})),n}mapFunction(e){let t=e.nodeDef,n=[],r=[],a={};t!=null&&(a=t.reduce((c,u)=>(c[u.name]=this.mapNode(u),u.op==="Const"&&r.push(c[u.name]),c),{}));let s=[],i=[];e.signature.inputArg.forEach(c=>{let[u]=ia(c.name),h={name:u,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:Fg(c.type),type:"dtype"}},children:[]};h.signatureKey=c.name,s.push(h),a[u]=h}),Object.keys(a).forEach(c=>{let u=a[c];u.inputNames.forEach(h=>{let[d]=ia(h);u.inputs.push(a[d]),a[d].children.push(u)})});let o=e.ret;e.signature.outputArg.forEach(c=>{let[u,h]=ia(o[c.name]),d=a[u];d!=null&&(d.defaultOutput=h,i.push(d))});let l=this.mapArgsToSignature(e);return{nodes:a,inputs:s,outputs:i,weights:r,placeholders:n,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function hne(e){let t=Q().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function W7(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):hne(e);return t?n:n.toLowerCase()}function Eg(e,t,n,r=!1){let a=e[t];return a!=null?W7(a.s,r):n}function Cg(e,t,n){let r=e[t];return r?r.b:n}function Rg(e,t,n){let r=e[t]||{},a=r.i!=null?r.i:r.f!=null?r.f:n;return typeof a=="number"?a:parseInt(a,10)}function Fg(e){switch(typeof e=="string"&&(e=br[e]),e){case br.DT_FLOAT:return"float32";case br.DT_INT32:case br.DT_INT64:case br.DT_INT8:case br.DT_UINT8:return"int32";case br.DT_BOOL:return"bool";case br.DT_DOUBLE:return"float32";case br.DT_STRING:return"string";default:return null}}function P7(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function Mg(e,t,n){let r=e[t];return r&&r.type?Fg(r.type):n}function $g(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(a=>Fg(a)):n}function B7(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function Dg(e,t,n){let r=e[t];return r&&r.shape?B7(r.shape):n}function Og(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(a=>typeof a=="number"?a:parseInt(a,10)):n}function zg(e,t,n,r=!1){let a=e[t];return a&&a.list&&a.list.s?a.list.s.map(s=>W7(s,r)):n}function Pg(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(a=>B7(a)):n}function Lg(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var dne=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(r=>this.getInput(r)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((r,a)=>(r[a]=this.getAttr(a),r),{}))}getInput(e){return xn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return xn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return Rg(this.node.rawAttrs,e,t);if(n.s!=null)return Eg(this.node.rawAttrs,e,t);if(n.b!=null)return Cg(this.node.rawAttrs,e,t);if(n.shape!=null)return Dg(this.node.rawAttrs,e,t);if(n.type!=null)return Mg(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return Og(this.node.rawAttrs,e,t);if(n.list.s!=null)return zg(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Pg(this.node.rawAttrs,e,t);if(n.list.b!=null)return Lg(this.node.rawAttrs,e,t);if(n.list.type!=null)return $g(this.node.rawAttrs,e,t)}return t}},pne=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[oe(I("a",e,t,n),I("b",e,t,n))];case"AddN":return[Yh(I("tensors",e,t,n))];case"FloorMod":case"Mod":return[tm(I("a",e,t,n),I("b",e,t,n))];case"Mul":return[L(I("a",e,t,n),I("b",e,t,n))];case"RealDiv":case"Div":return[Ne(I("a",e,t,n),I("b",e,t,n))];case"DivNoNan":return[qf(I("a",e,t,n),I("b",e,t,n))];case"FloorDiv":return[Jh(I("a",e,t,n),I("b",e,t,n))];case"Sub":return[we(I("a",e,t,n),I("b",e,t,n))];case"Minimum":return[Xo(I("a",e,t,n),I("b",e,t,n))];case"Maximum":return[Er(I("a",e,t,n),I("b",e,t,n))];case"Pow":return[Jr(I("a",e,t,n),I("b",e,t,n))];case"SquaredDifference":return[_d(I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},fne=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[$t(I("x",e,t,n))];case"Acos":return[$f(I("x",e,t,n))];case"Acosh":return[Df(I("x",e,t,n))];case"Asin":return[zf(I("x",e,t,n))];case"Asinh":return[Pf(I("x",e,t,n))];case"Atan":return[Lf(I("x",e,t,n))];case"Atan2":return[Wf(I("x",e,t,n),I("y",e,t,n))];case"Atanh":return[Bf(I("x",e,t,n))];case"Ceil":return[Uf(I("x",e,t,n))];case"Complex":return[ga(I("real",e,t,n),I("imag",e,t,n))];case"Cos":return[Eu(I("x",e,t,n))];case"Cosh":return[rd(I("x",e,t,n))];case"Elu":return[Ho(I("x",e,t,n))];case"Erf":return[Xf(I("x",e,t,n))];case"Exp":return[Pn(I("x",e,t,n))];case"Expm1":return[Kf(I("x",e,t,n))];case"Floor":return[jo(I("x",e,t,n))];case"Log":return[kn(I("x",e,t,n))];case"Log1p":return[od(I("x",e,t,n))];case"Imag":return[sd(I("x",e,t,n))];case"Neg":return[_t(I("x",e,t,n))];case"Reciprocal":return[nm(I("x",e,t,n))];case"Real":return[Ou(I("x",e,t,n))];case"Relu":return[Rr(I("x",e,t,n))];case"Round":return[rm(I("x",e,t,n))];case"Selu":return[md(I("x",e,t,n))];case"Sigmoid":return[Yn(I("x",e,t,n))];case"Sin":return[Ad(I("x",e,t,n))];case"Sign":return[sm(I("x",e,t,n))];case"Sinh":return[yd(I("x",e,t,n))];case"Softplus":return[Go(I("x",e,t,n))];case"Sqrt":return[Xt(I("x",e,t,n))];case"Square":return[ot(I("x",e,t,n))];case"Tanh":return[Vo(I("x",e,t,n))];case"Tan":return[lm(I("x",e,t,n))];case"ClipByValue":return[pn(I("x",e,t,n),I("clipValueMin",e,t,n),I("clipValueMax",e,t,n))];case"Relu6":return[pd(I("x",e,t,n))];case"Rsqrt":return[fd(xn(e.inputNames[0],t,n))];case"Prod":return[hd(I("x",e,t,n),I("axes",e,t,n))];case"LeakyRelu":return[Ru(I("x",e,t,n),I("alpha",e,t,n))];case"Prelu":return[Du(I("x",e,t,n),I("alpha",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function lr(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){k.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let r=0;r<e.length;r++){let a=e[r],s=t[r];k.assert(a<0||s<0||a===s,()=>n+` Shapes ${e} and ${t} must match`)}}}function V7(e){return!(typeof e=="number"||e.some(t=>t<0))}function Oc(e,t,n){let r=Wg(e,n),a=!V7(r);if(a&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(a&&t.forEach(s=>{r=Wg(s.shape,r)}),!V7(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function Wg(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let r=0;r<e.length;++r){let a=e[r],s=t[r];if(a>=0&&s>=0&&a!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=a>=0?a:s}return n}var mne=class{constructor(e,t,n,r,a,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=a,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Se(0),Bt(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},
|
|
because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),lr(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,Bt(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,r)=>this.write(n,t[r]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let r=0;r<this.size();r++)e.push(r)}if(e.length===0)return dr([],[0].concat(this.elementShape));let n=this.readMany(e);return lr(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),Sn(n,0)}concat(e){if(!!e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(this.size()===0)return dr([],[0].concat(this.elementShape));let t=[];for(let r=0;r<this.size();r++)t.push(r);let n=this.readMany(t);return lr(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),ct(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,tr(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,r=e.map(o=>(n+=o,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let a=n===0?0:t.size/n,s=[];U(()=>{t=q(t,[1,n,a]);for(let o=0;o<e.length;++o){let l=o===0?0:r[o-1],c=[0,l,0],u=[1,e[o],a];s[o]=q(Me(t,c,u),this.elementShape)}return s});let i=[];for(let o=0;o<e.length;o++)i[o]=o;this.writeMany(i,s)}},zc=class{constructor(e,t,n,r=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(a=>{if(n!==a.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${a.dtype}`);lr(t,a.shape,"TensorList shape mismatch: "),Bt(a)}),this.idTensor=Se(0),this.maxNumElements=r,Bt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new zc([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);lr(e,this.elementShape,"TensorList shape mismatch: ");let r=Oc(this.elementShape,this.tensors,e);return U(()=>{let a=this.tensors.map(s=>q(s,r));return Sn(a,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Oc(this.elementShape,this.tensors,e),r=this.tensors.pop();return lr(r.shape,e,"TensorList shape mismatch: "),q(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(lr(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Bt(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=e}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);lr(this.tensors[e].shape,t,"TensorList shape mismatch: ");let r=Oc(this.elementShape,this.tensors,t);return q(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);lr(this.elementShape,t.shape,"TensorList shape mismatch: "),Bt(t),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);lr(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let r=Oc(this.elementShape,this.tensors,n);return e.length===0?dr([],[0].concat(r)):U(()=>{let a=e.map(s=>q(this.tensors[s],r));return Sn(a,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);lr(this.elementShape,t,"TensorList shape mismatch: ");let n=Oc(this.elementShape,this.tensors,t);return this.size()===0?dr([],[0].concat(n)):U(()=>{let r=this.tensors.map(a=>q(a,n));return ct(r,0)})}};function Ane(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let a=e.shape.slice(1);lr(a,t,"TensorList shape mismatch: ");let s=tr(e);return new zc(s,t,r)}function yne(e,t,n){return new zc([],e,t,n)}function gne(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let a=Math.max(...t);if(r!=null&&r!==-1&&a>=r)throw new Error(`Max index must be < array size (${a} vs. ${r})`);let s=new zc([],n,e.dtype,r),i=tr(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function xne(e,t,n){let r=0,a=t.map(u=>(r+=u,r));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${r}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=Wg(s,n),o=r===0?0:e.size/r,l=U(()=>{let u=[];e=q(e,[1,r,o]);for(let h=0;h<t.length;++h){let d=h===0?0:a[h-1],p=[0,d,0],f=[1,t[h],o];u[h]=q(Me(e,p,f),i)}return e.dispose(),u}),c=new zc([],n,e.dtype,t.length);for(let u=0;u<l.length;u++)c.setItem(u,l[u]);return c}var wne=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let r=I("thenBranch",e,t,n),a=I("elseBranch",e,t,n),s=I("cond",e,t,n),i=I("args",e,t,n);return(await s.data())[0]?n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=I("body",e,t,n),a=I("cond",e,t,n),s=I("args",e,t,n),i=await n.functionMap[a].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map(u=>u.id),l=await i[0].data();i.forEach(u=>{!u.kept&&o.indexOf(u.id)===-1&&u.dispose()});let c=s;for(;l[0];){let u=c;c=await n.functionMap[r].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);let h=c.map(p=>p.id);u.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()});let d=await n.functionMap[a].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);l=await d[0].data(),d.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&h.indexOf(p.id)===-1&&p.dispose()})}return c}case"LoopCond":{let r=I("pred",e,t,n);return[oa(r)]}case"Switch":{let r=I("pred",e,t,n),a=I("data",e,t,n);return a.kept||(a=oa(a)),(await r.data())[0]?[void 0,a]:[a,void 0]}case"Merge":{let r=e.inputNames.find(a=>xn(a,t,n)!==void 0);if(r){let a=xn(r,t,n);return[oa(a)]}return}case"Enter":{let r=I("frameName",e,t,n),a=I("tensor",e,t,n);return n.enterFrame(r),[oa(a)]}case"Exit":{let r=I("tensor",e,t,n);return n.exitFrame(),[oa(r)]}case"NextIteration":{let r=I("tensor",e,t,n);return n.nextIteration(),[oa(r)]}case"TensorArrayV3":{let r=I("size",e,t,n),a=I("dtype",e,t,n),s=I("elementShape",e,t,n),i=I("dynamicSize",e,t,n),o=I("clearAfterRead",e,t,n),l=I("identicalElementShapes",e,t,n),c=I("name",e,t,n),u=new mne(c,a,r,s,l,i,o);return n.addTensorArray(u),[u.idTensor,Se(1)]}case"TensorArrayWriteV3":{let r=I("tensorArrayId",e,t,n),a=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(r.id);return i.write(a,s),[i.idTensor]}case"TensorArrayReadV3":{let r=I("tensorArrayId",e,t,n),a=I("index",e,t,n);return[n.getTensorArray(r.id).read(a)]}case"TensorArrayGatherV3":{let r=I("tensorArrayId",e,t,n),a=I("indices",e,t,n),s=I("dtype",e,t,n);return[n.getTensorArray(r.id).gather(a,s)]}case"TensorArrayScatterV3":{let r=I("tensorArrayId",e,t,n),a=I("indices",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(r.id);return i.scatter(a,s),[i.idTensor]}case"TensorArrayConcatV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id),s=I("dtype",e,t,n);return[a.concat(s)]}case"TensorArraySplitV3":{let r=I("tensorArrayId",e,t,n),a=I("tensor",e,t,n),s=I("lengths",e,t,n),i=n.getTensorArray(r.id);return i.split(s,a),[i.idTensor]}case"TensorArraySizeV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return[Se(a.size(),"int32")]}case"TensorArrayCloseV3":{let r=I("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return a.clearAndClose(),[a.idTensor]}case"TensorListSetItem":{let r=I("tensorListId",e,t,n),a=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorList(r.id);return i.setItem(a,s),[i.idTensor]}case"TensorListGetItem":{let r=I("tensorListId",e,t,n),a=I("index",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(a,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let r=I("indices",e,t,n),a=I("tensor",e,t,n),s=I("elementShape",e,t,n),i=I("numElements",e,t,n),o=gne(a,r,s,i);return n.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=I("elementShape",e,t,n),a=I("elementDType",e,t,n),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=I(s,e,t,n),o=yne(r,a,i);return n.addTensorList(o),[o.idTensor]}case"TensorListGather":{let r=I("tensorListId",e,t,n),a=I("indices",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(r.id).gather(a,i,s)]}case"TensorListStack":{let r=I("tensorListId",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=I("numElements",e,t,n);return[n.getTensorList(r.id).stack(a,s,i)]}case"TensorListFromTensor":{let r=I("tensor",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=Ane(r,a,s);return n.addTensorList(i),[i.idTensor]}case"TensorListConcat":{let r=I("tensorListId",e,t,n),a=n.getTensorList(r.id),s=I("dtype",e,t,n),i=I("elementShape",e,t,n);return[a.concat(s,i)]}case"TensorListPushBack":{let r=I("tensorListId",e,t,n),a=I("tensor",e,t,n),s=n.getTensorList(r.id);return s.pushBack(a),[s.idTensor]}case"TensorListPopBack":{let r=I("tensorListId",e,t,n),a=I("elementShape",e,t,n),s=I("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(a,s)]}case"TensorListSplit":{let r=I("tensor",e,t,n),a=I("elementShape",e,t,n),s=I("lengths",e,t,n),i=xne(r,s,a);return n.addTensorList(i),[i.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function U7(e,t,n){let[r,a]=I("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=r==="fusedbatchnorm",l=I("numArgs",e,t,n);if(s){if(i&&l!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&l!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(o)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported.");let c=I("strides",e,t,n),u=e1(e,t,n),h=I("dataFormat",e,t,n).toUpperCase(),d=I("dilations",e,t,n),[p,f]=I("args",e,t,n),m=I("leakyreluAlpha",e,t,n);return{stride:c,pad:u,dataFormat:h,dilations:d,biasArg:p,preluArg:f,activationFunc:a,leakyreluAlpha:m}}var _ne=(e,t,n)=>{switch(e.op){case"Conv1D":{let r=I("stride",e,t,n),a=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilation",e,t,n);return[td(I("x",e,t,n),I("filter",e,t,n),r,a,s,i)]}case"Conv2D":{let r=I("strides",e,t,n),a=e1(e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[Kr(I("x",e,t,n),I("filter",e,t,n),[r[1],r[2]],a,s,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:c,leakyreluAlpha:u}=U7(e,t,n);return[va.conv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:c,preluActivationWeights:l,leakyreluAlpha:u})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:c,leakyreluAlpha:u}=U7(e,t,n);return[va.depthwiseConv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:c,preluActivationWeights:l,leakyreluAlpha:u})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=I("outputShape",e,t,n),a=I("strides",e,t,n),s=e1(e,t,n);return[nd(I("x",e,t,n),I("filter",e,t,n),r,[a[1],a[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=I("strides",e,t,n),a=e1(e,t,n),s=I("dilations",e,t,n),i=I("dataFormat",e,t,n).toUpperCase();return[Uo(I("input",e,t,n),I("filter",e,t,n),[r[1],r[2]],a,i,[s[1],s[2]])]}case"Conv3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[Hf(I("x",e,t,n),I("filter",e,t,n),[r[1],r[2],r[3]],a,s,[i[1],i[2],i[3]])]}case"AvgPool":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Nu(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPool":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Mu(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPoolWithArgmax":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n),i=I("includeBatchInIndex",e,t,n),{result:o,indexes:l}=c0(I("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a,i);return[o,l]}case"AvgPool3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Vf(I("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"MaxPool3D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Qf(I("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"Dilation2D":{let r=I("strides",e,t,n),a=I("pad",e,t,n),s=I("dilations",e,t,n),i=r[1],o=r[2],l=s[1],c=s[2];return[Gf(I("x",e,t,n),I("filter",e,t,n),[i,o],a,[l,c],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},bne=(e,t,n)=>{switch(e.op){case"Fill":{let r=I("shape",e,t,n),a=I("dtype",e,t,n),s=I("value",e,t,n);return[Cu(r,s,a)]}case"LinSpace":{let r=I("start",e,t,n),a=I("stop",e,t,n),s=I("num",e,t,n);return[i0(r,a,s)]}case"Multinomial":{let r=I("logits",e,t,n),a=I("numSamples",e,t,n),s=I("seed",e,t,n);return[h0(r,a,s)]}case"OneHot":{let r=I("indices",e,t,n),a=I("depth",e,t,n),s=I("onValue",e,t,n),i=I("offValue",e,t,n);return[Wo(r,a,s,i)]}case"Ones":return[Cr(I("shape",e,t,n),I("dtype",e,t,n))];case"OnesLike":return[In(I("x",e,t,n))];case"RandomUniform":return[Ko(I("shape",e,t,n),I("minval",e,t,n),I("maxval",e,t,n),I("dtype",e,t,n))];case"Range":{let r=I("start",e,t,n),a=I("stop",e,t,n),s=I("step",e,t,n);return[dd(r,a,s,I("dtype",e,t,n))]}case"TruncatedNormal":{let r=I("shape",e,t,n),a=I("mean",e,t,n),s=I("stdDev",e,t,n),i=I("seed",e,t,n);return[bd(r,a,s,I("dtype",e,t,n),i)]}case"Zeros":return[Ct(I("shape",e,t,n),I("dtype",e,t,n))];case"ZerosLike":return[He(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Bg(e,t,n){let r=I("boxes",e,t,n),a=I("scores",e,t,n),s=I("maxOutputSize",e,t,n),i=I("iouThreshold",e,t,n),o=I("scoreThreshold",e,t,n),l=I("softNmsSigma",e,t,n);return{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var vne=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}=Bg(e,t,n),c=await St.nonMaxSuppressionWithScoreAsync(r,a,s,i,o,l);return[c.selectedIndices,c.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Bg(e,t,n),l=I("padToMaxOutputSize",e,t,n),c=await St.nonMaxSuppressionPaddedAsync(r,a,s,i,o,l);return[c.selectedIndices,c.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Bg(e,t,n);return[await St.nonMaxSuppressionAsync(r,a,s,i,o)]}case"Where":{let r=ye(I("condition",e,t,n),"bool"),a=[await hm(r)];return r.dispose(),a}case"ListDiff":return f0(I("x",e,t,n),I("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},kne=(e,t,n)=>{switch(e.op){case"TopKV2":{let r=I("x",e,t,n),a=I("k",e,t,n),s=I("sorted",e,t,n),i=um(r,a,s);return[i.values,i.indices]}case"Unique":{let r=I("x",e,t,n),a=vd(r);return[a.values,a.indices]}case"UniqueV2":{let r=I("x",e,t,n),a=I("axis",e,t,n),s=vd(r,a);return[s.values,s.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Ine=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=I("default",e,t,n);return[xn(e.name,t,n)||r];case"Placeholder":return[xn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let c=I("x",e,t,n);return[oa(c)]}case"IdentityN":return I("x",e,t,n).map(c=>oa(c));case"Snapshot":let a=I("x",e,t,n);return[oa(a)];case"Shape":return[Qt(I("x",e,t,n).shape,"int32")];case"ShapeN":return I("x",e,t,n).map(c=>Qt(c.shape));case"Size":return[Se(I("x",e,t,n).size,"int32")];case"Rank":return[Se(I("x",e,t,n).rank,"int32")];case"NoOp":return[Se(1)];case"Print":let s=I("x",e,t,n),i=I("data",e,t,n),o=I("message",e,t,n),l=I("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(o);for(let c=0;c<i.length;c++)console.log(Array.prototype.slice.call(i[c].dataSync()).slice(0,l));return[s];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Nne=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=Se(0),this.tensorMap=new Map,Bt(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(e=>e.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),U(()=>{let r=tr(t),a=n.length,s=r.length;k.assert(a===s,()=>`The number of elements doesn't match, keys has ${a} elements, the values has ${s} elements.`);for(let i=0;i<a;i++){let o=n[i],l=r[i];Bt(l),this.tensorMap.set(o,l)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return U(()=>{let r=[];for(let a=0;a<n.length;a++){let s=n[a],i=this.findWithDefault(s,t);r.push(i)}return Sn(r)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},Sne=async(e,t,n,r)=>{switch(e.op){case"HashTable":case"HashTableV2":{let a=I("keyDType",e,t,n),s=I("valueDType",e,t,n),i=new Nne(a,s);return r.addHashTable(e.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{let a=I("tableHandle",e,t,n,r),s=I("keys",e,t,n),i=I("values",e,t,n);return[await r.getHashTableById(a.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let a=I("tableHandle",e,t,n,r),s=I("keys",e,t,n),i=I("defaultValue",e,t,n);return[await r.getHashTableById(a.id).find(s,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Tne=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let r=I("images",e,t,n),a=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[St.resizeBilinear(r,[a[0],a[1]],s,i)]}case"ResizeNearestNeighbor":{let r=I("images",e,t,n),a=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[St.resizeNearestNeighbor(r,[a[0],a[1]],s,i)]}case"CropAndResize":{let r=I("image",e,t,n),a=I("boxes",e,t,n),s=I("boxInd",e,t,n),i=I("cropSize",e,t,n),o=I("method",e,t,n),l=I("extrapolationValue",e,t,n);return[St.cropAndResize(r,a,s,i,o,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Ene=(e,t,n)=>{switch(e.op){case"Equal":return[xa(I("a",e,t,n),I("b",e,t,n))];case"NotEqual":return[qs(I("a",e,t,n),I("b",e,t,n))];case"Greater":return[Qn(I("a",e,t,n),I("b",e,t,n))];case"GreaterEqual":return[_a(I("a",e,t,n),I("b",e,t,n))];case"Less":return[id(I("a",e,t,n),I("b",e,t,n))];case"LessEqual":return[Gs(I("a",e,t,n),I("b",e,t,n))];case"LogicalAnd":return[er(I("a",e,t,n),I("b",e,t,n))];case"LogicalNot":return[Fu(I("a",e,t,n))];case"LogicalOr":return[ud(I("a",e,t,n),I("b",e,t,n))];case"Select":case"SelectV2":return[fn(I("condition",e,t,n),I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Cne=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[qe(I("a",e,t,n),I("b",e,t,n),I("transposeA",e,t,n),I("transposeB",e,t,n))];case"Transpose":return[at(I("x",e,t,n),I("perm",e,t,n))];case"_FusedMatMul":let[r,a]=I("fusedOps",e,t,n),s=r==="biasadd",i=a==="prelu",o=I("numArgs",e,t,n),l=I("leakyreluAlpha",e,t,n);if(s){if(i&&o!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[c,u]=I("args",e,t,n);return[va.matMul({a:I("a",e,t,n),b:I("b",e,t,n),transposeA:I("transposeA",e,t,n),transposeB:I("transposeB",e,t,n),bias:c,activation:a,preluActivationWeights:u,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Rne=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[Hs(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"FusedBatchNormV3":return[Hs(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"LRN":return[Jf(I("x",e,t,n),I("radius",e,t,n),I("bias",e,t,n),I("alpha",e,t,n),I("beta",e,t,n))];case"Softmax":return[Pu(I("x",e,t,n))];case"LogSoftmax":return[ld(I("x",e,t,n))];case"SparseToDense":return[dm(I("sparseIndices",e,t,n),I("outputShape",e,t,n),I("sparseValues",e,t,n),I("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Fne=(e,t,n)=>{switch(e.op){case"Max":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Ln(I("x",e,t,n),i,o)]}case"Mean":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[bt(I("x",e,t,n),i,o)]}case"Min":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[qo(I("x",e,t,n),i,o)]}case"Sum":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Te(I("x",e,t,n),i,o)]}case"All":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Qh(I("x",e,t,n),i,o)]}case"Any":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[ku(I("x",e,t,n),i,o)]}case"ArgMax":{let i=I("axis",e,t,n);return[Iu(I("x",e,t,n),i)]}case"ArgMin":{let i=I("axis",e,t,n);return[Of(I("x",e,t,n),i)]}case"Prod":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[hd(I("x",e,t,n),i,o)]}case"Cumsum":{let i=I("axis",e,t,n),o=I("exclusive",e,t,n),l=I("reverse",e,t,n);return[ad(I("x",e,t,n),i,o,l)]}case"Bincount":let r=I("x",e,t,n),a=I("weights",e,t,n),s=I("size",e,t,n);return[J2(r,a,s)];case"DenseBincount":{let i=I("x",e,t,n),o=I("weights",e,t,n),l=I("size",e,t,n),c=I("binaryOutput",e,t,n);return[t0(i,o,l,c)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Mne=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=I("n",e,t,n),a=I("axis",e,t,n),s=I("tensors",e,t,n);return s=s.slice(0,r),[ct(s,a)]}case"Gather":{let r=I("x",e,t,n),a=I("indices",e,t,n);return[js(r,ye(a,"int32"),0)]}case"GatherV2":{let r=I("axis",e,t,n),a=I("batchDims",e,t,n),s=I("x",e,t,n),i=I("indices",e,t,n);return[js(s,ye(i,"int32"),r,a)]}case"Reverse":{let r=I("dims",e,t,n),a=[];for(let i=0;i<r.length;i++)r[i]&&a.push(i);let s=I("x",e,t,n);return[Nn(s,a)]}case"ReverseV2":{let r=I("axis",e,t,n),a=I("x",e,t,n);return[Nn(a,r)]}case"Slice":{let r=I("begin",e,t,n),a=I("size",e,t,n);return[Me(I("x",e,t,n),r,a)]}case"StridedSlice":{let r=I("begin",e,t,n),a=I("end",e,t,n),s=I("strides",e,t,n),i=I("beginMask",e,t,n),o=I("endMask",e,t,n),l=I("ellipsisMask",e,t,n),c=I("newAxisMask",e,t,n),u=I("shrinkAxisMask",e,t,n),h=I("x",e,t,n);return[om(h,r,a,s,i,o,l,c,u)]}case"Pack":return U(()=>{let r=I("axis",e,t,n),a=I("tensors",e,t,n),s=a[0].shape,i=ba(a[0]).shape,o=a.map(l=>{let c=k.arraysEqual(l.shape,s);if(!c&&!k.arraysEqual(ba(l).shape,i))throw new Error("the input tensors shape does not match");return c?l:q(l,s)});return[Sn(o,r)]});case"Unpack":{let r=I("axis",e,t,n),a=I("tensor",e,t,n);return tr(a,r)}case"Tile":{let r=I("reps",e,t,n);return[wa(I("x",e,t,n),r)]}case"Split":case"SplitV":{let r=I("axis",e,t,n),a=I("numOrSizeSplits",e,t,n),s=I("x",e,t,n);return an(s,a,r)}case"ScatterNd":{let r=I("indices",e,t,n),a=I("values",e,t,n),s=I("shape",e,t,n);return[A0(r,a,s)]}case"GatherNd":{let r=I("x",e,t,n),a=I("indices",e,t,n);return[y0(r,a)]}case"SparseToDense":{let r=I("sparseIndices",e,t,n),a=I("outputShape",e,t,n),s=I("sparseValues",e,t,n),i=I("defaultValue",e,t,n);return[dm(r,s,a,s.dtype===i.dtype?i:ye(i,s.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},$ne=(e,t,n)=>{switch(e.op){case"FFT":return[Lu(I("x",e,t,n))];case"IFFT":return[Zo(I("x",e,t,n))];case"RFFT":return[Wu(I("x",e,t,n))];case"IRFFT":return[wd(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},Dne=(e,t,n)=>{switch(e.op){case"Cast":return[ye(I("x",e,t,n),I("dtype",e,t,n))];case"ExpandDims":{let r=I("axis",e,t,n);return[vn(I("x",e,t,n),r)]}case"Squeeze":{let r=I("axis",e,t,n);return[ba(I("x",e,t,n),r)]}case"Reshape":return[q(I("x",e,t,n),I("shape",e,t,n))];case"MirrorPad":return[em(I("x",e,t,n),I("padding",e,t,n),I("mode",e,t,n))];case"PadV2":case"Pad":return[Zr(I("x",e,t,n),I("padding",e,t,n),I("constantValue",e,t,n))];case"SpaceToBatchND":{let r=I("blockShape",e,t,n),a=I("paddings",e,t,n);return[$u(I("x",e,t,n),r,a)]}case"BatchToSpaceND":{let r=I("blockShape",e,t,n),a=I("crops",e,t,n);return[Su(I("x",e,t,n),r,a)]}case"DepthToSpace":{let r=I("blockSize",e,t,n),a=I("dataFormat",e,t,n).toUpperCase();return[jf(I("x",e,t,n),r,a)]}case"BroadcastTo":return[Tu(I("x",e,t,n),I("shape",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function H7(e,t,n,r){let a=((s,i,o)=>{switch(s.category){case"arithmetic":return U(()=>pne(s,i,o));case"basic_math":return U(()=>fne(s,i,o));case"control":return wne(s,i,o);case"convolution":return U(()=>_ne(s,i,o));case"creation":return U(()=>bne(s,i,o));case"dynamic":return vne(s,i,o);case"evaluation":return U(()=>kne(s,i,o));case"image":return U(()=>Tne(s,i,o));case"graph":return U(()=>Ine(s,i,o));case"logical":return U(()=>Ene(s,i,o));case"matrices":return U(()=>Cne(s,i,o));case"normalization":return U(()=>Rne(s,i,o));case"reduction":return U(()=>Fne(s,i,o));case"slice_join":return U(()=>Mne(s,i,o));case"spectral":return U(()=>$ne(s,i,o));case"transformation":return U(()=>Dne(s,i,o));case"hash_table":return Sne(s,i,o,r);case"custom":let l=w7(s.op);if(l&&l.customExecutor)return l.customExecutor(new dne(s,i,o));throw TypeError(`Custom op ${s.op} is not registered.`);default:throw TypeError(`Unknown op '${s.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return k.isPromise(a)?a.then(s=>[].concat(s)):[].concat(a)}var j7=class{constructor(e={},t={},n={},r={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function q7(e,t,n,r){let a=new Set,s=[],i=null,o=null,l=new Set,c=Object.keys(e).map(d=>Fn(d)[0]),u=[];r!=null&&(u=r.map(d=>Fn(d.name)[0]));let h=[...t];for(;h.length>0;){let d=h.pop();if((G7(d)||One(d)||zne(d))&&i==null&&(i=d,o=i.children.map(p=>p.name).filter(p=>a.has(p))),a.add(d.name),n[d.name]==null&&c.indexOf(d.name)===-1&&u.indexOf(d.name)===-1){if(d.inputs.length===0){s.push(d.name);continue}d.inputs.forEach(p=>{l.has(p.name)||(l.add(p.name),h.push(p))})}}return{inputs:e,outputs:t,usedNodes:a,missingInputs:s,dynamicNode:i,syncInputs:o}}function Pne(e,t,n){let{usedNodes:r,inputs:a}=n,s=[],i=Object.keys(a).map(u=>Fn(u)[0]).map(u=>e.nodes[u]),o=e.initNodes;i.forEach(u=>{r.has(u.name)&&s.push(u)}),e.weights.forEach(u=>{r.has(u.name)&&s.push(u)}),o!=null&&o.forEach(u=>{r.has(u.name)&&s.push(u)});let l=new Set,c=[];for(;s.length>0;){let u=s.pop();l.add(u.name),t[u.name]||c.push(u),u.children.forEach(h=>{!l.has(h.name)&&r.has(h.name)&&h.inputs.every(d=>l.has(d.name))&&s.push(h)})}return c}var Lne=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],Wne=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],Bne=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2"];function G7(e){return Lne.indexOf(e.op)>=0}function One(e){return Wne.indexOf(e.op)>=0}function zne(e){return Bne.indexOf(e.op)>=0}var Vg=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new Vg(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(r=>r.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(a=>a.name).sort(),r=t.map(a=>a.name).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){let n=q7(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:a,syncInputs:s}=n;if(a!=null)throw new Error(`This execution contains the node '${a.name}', which has the dynamic op '${a.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(r.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${r}]`)}return Pne(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let r=n.map(u=>this.graph.nodes[Fn(u)[0]]),a=t.map(u=>Fn(u)[0]),s=a.map(u=>this.graph.nodes[u]);s.length===0&&(s=this._outputs);let i=this.getCompilationKey(r,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));let l={},c={};return U(()=>{let u=new j7(this.weightMap,l,c,this.functionExecutorMap),h=Object.assign({},this.weightMap);Object.keys(e).forEach(f=>{let[m,A]=Fn(f),y=[];y[A]=e[f],h[m]=y});let d=this.getFrozenTensorIds(h),p={};for(let f=0;f<o.length;f++){let m=o[f];if(!h[m.name]){let A=H7(m,h,u,this._resourceManager);if(k.isPromise(A))throw new Error(`The execution of the op '${m.op}' returned a promise. Please use model.executeAsync() instead.`);h[m.name]=A,this.checkTensorForDisposal(m.name,m,h,u,d,a,p)}}return this.parent==null&&u.dispose(d),t.map(f=>xn(f,h,u))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(r=>r.id)));return new Set(t)}checkTensorForDisposal(e,t,n,r,a,s,i){t.category==="control"||s.indexOf(e)!==-1||(n[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=qte(o.name,n,r);l!=null&&l.forEach(c=>{if(c&&!a.has(c.id)){let u=i[c.id];u===1?(c.dispose(),delete i[c.id]):u!=null&&i[c.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,r={},a={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));let s=new j7(this.weightMap,r,a,this.functionExecutorMap),i=await this.executeWithControlFlow(e,s,t,n),o=t.map(h=>xn(h,i,s)),l=o.map(h=>h.id),c=Object.keys(e).map(h=>e[h].id),u=new Set([...l,...c,...this.weightIds]);return Object.keys(i).forEach(h=>{i[h].forEach(d=>{d&&!d.isDisposed&&!u.has(d.id)&&d.dispose()})}),this.parent==null&&s.dispose(u),o}async executeFunctionAsync(e,t,n){let r=e.reduce((a,s,i)=>(a[this.inputs[i].name]=s,a),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let a=Object.keys(e),s=a.map(g=>this.graph.nodes[Fn(g)[0]]),i=n.map(g=>Fn(g)[0]),o=i.map(g=>this.graph.nodes[g]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:c,dynamicNode:u,syncInputs:h}=q7(e,o,this.weightMap,this._initNodes),d=[...s,...this.graph.weights,...this._initNodes||[]].map(g=>({node:g,contexts:t.currentContext})),p=Object.assign({},this.weightMap);Object.keys(e).forEach(g=>{let[b,x]=Fn(g),w=[];w[x]=e[g],p[b]=w});let f={},m=this.getFrozenTensorIds(p),A={};for(;d.length>0;){let g=this.processStack(s,d,t,p,A,m,i,f,l);await Promise.all(g)}u==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=o.filter(g=>!G7(g)&&!xn(g.name,p,t)).map(g=>g.name);if(y.length>0){let g="";throw u!=null&&(g=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${a}]. Consider providing the following inputs: [${c}]. ${g}`)}return p}processStack(e,t,n,r,a,s,i,o,l){let c=[];for(;t.length>0;){let u=t.pop();n.currentContext=u.contexts;let h="";if(u.node.op==="Enter"&&I("isConstant",u.node,r,n)&&([h]=ia(u.node.name,n)),r[u.node.name]==null){let d=H7(u.node,r,n,this._resourceManager);h||([h]=ia(u.node.name,n));let p=n.currentContext;k.isPromise(d)?c.push(d.then(f=>(r[h]=f,n.currentContext=p,this.checkTensorForDisposal(h,u.node,r,n,s,i,o),this.processChildNodes(u.node,t,n,r,a,l),f))):(r[h]=d,this.checkTensorForDisposal(h,u.node,r,n,s,i,o),this.processChildNodes(u.node,t,n,r,a,l))}else this.processChildNodes(u.node,t,n,r,a,l)}return c}processChildNodes(e,t,n,r,a,s){e.children.forEach(i=>{let[o]=ia(i.name,n);a[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!xn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!xn(l,r,n))&&(a[o]=!0,t.push({contexts:n.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[r]=Fn(t),a=this.graph.nodes[r];if(a.attrParams.shape&&a.attrParams.shape.value){let s=a.attrParams.shape.value,i=s.length===n.shape.length&&n.shape.every((o,l)=>s[l]===-1||s[l]===o);k.assert(i,()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${s}], but was [${n.shape}]`)}a.attrParams.dtype&&a.attrParams.dtype.value&&k.assert(n.dtype===a.attrParams.dtype.value,()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let r=this._signature.inputs[n];t[r.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[r]=Fn(n);return this.graph.nodes[r]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=Fn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},Vne=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},Une="?tfjs-format=file",Hne="model.json",B0=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new Vne}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=dn.browserHTTPRequest(e,this.loadOptions);else{let t=dn.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(dn.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}async load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?n=this.artifacts.userDefinedMetadata.signature:n=this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let r=dn.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new Vg(L7.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let a=L7.Instance.transformGraph(e.modelInitializer);this.initializer=new Vg(a),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if(typeof e=="string"){let n=dn.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof et)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,r)=>(t[n]=e[r],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function Zn(e,t={}){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&e.load==null&&(e.endsWith("/")||(e=e+"/"),e=`${e}${Hne}${Une}`);let n=new B0(e,t);return await n.load(),n}var q8="3.1.0",V0={};ze(V0,{CSVDataset:()=>K7,Dataset:()=>Rl,FileDataSource:()=>Z7,TextLineDataset:()=>X7,URLDataSource:()=>J7,array:()=>jne,csv:()=>qne,func:()=>Xne,generator:()=>Kne,microphone:()=>Jne,version_data:()=>Yne,webcam:()=>Zne,zip:()=>Gne});var Qne=Qo(U0()),ere=Qo(U0());function tre(e,t){return t1(e,t)}function t1(e,t,n=new Map,r=new Set){if(e==null)return null;if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(a.recurse)if(Fl(e)){let s=Array.isArray(e)?[]:{};r.add(e);for(let i in e){let o=e[i],l=t1(o,t,n,r);s[i]=l}return r.delete(e),s}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,a.value),a.value}function nre(e,t=Q7){return Y7(e,t)}function Y7(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let a=t(e);if(a.recurse&&a.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(a.recurse)if(Fl(r)){let s=Array.isArray(r)?[]:{};n.add(r);for(let i in r){let o=e.map(c=>c[i]),l=Y7(o,t,n);s[i]=l}return n.delete(r),s}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return a.value}function Q7(e){return e===null?null:Fl(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function e6(e,t){let n=new Map;t1(e,t,n);for(let r of Array.from(n.keys())){let a=n.get(r);if(k.isPromise(a)){let s=await a;n.set(r,s)}}return t1(e,t,n)}function Fl(e){return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof et))}function are(e){return e==null||rre(e)||Array.isArray(e)||typeof e=="object"&&e instanceof et||k.isTypedArray(e)}function rre(e){return e===null||typeof e!="object"&&typeof e!="function"}function ire(e){return tre(e,sre)}function sre(e){return e instanceof et?{value:e.clone(),recurse:!1}:Fl(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var t6=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,e==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}},Ug=class extends t6{constructor(){super(Ug.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let r=0;r<n;r++)t[r]=this.get(this.wrap(this.begin+r));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};Ug.INITIAL_CAPACITY=32;function n6(e){return new ore(e)}function Hg(e){return new lre(e)}function ure(e,t){return new r6(e,t)}function hre(e,t=Wa.FAIL){return new cre(e,t)}var Gt=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new gre(this,e)}filter(e){return new Are(this,e)}map(e){return new yre(this,e)}mapAsync(e){return new a6(this,e)}serialMapAsync(e){return new a6(this,e).serial()}flatmap(e){return new xre(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile(t=>t===!0)}rowMajorBatch(e,t=!0){return new mre(this,e,t)}columnMajorBatch(e,t=!0,n=Q7){return this.rowMajorBatch(e,t).map(r=>nre(r,n))}concatenate(e,t){return new r6(n6([this,e]),t)}take(e){return e<0||e==null?this:new fre(this,e)}skip(e){return e<0||e==null?this:new pre(this,e)}prefetch(e){return new s6(this,e)}shuffle(e,t){return new wre(this,e,t)}serial(){return new dre(this)}},ore=class extends Gt{constructor(e){super();this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:ire(e),done:!1}}},lre=class extends Gt{constructor(e){super();this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},dre=class extends Gt{constructor(e){super();this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},pre=class extends Gt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;Fe(e.value)}return this.upstream.next()}},fre=class extends Gt{constructor(e,t){super();this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},mre=class extends Gt{constructor(e,t,n=!0){super();this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},Are=class extends Gt{constructor(e,t){super();this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;Fe(e.value)}}},yre=class extends Gt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=hr.getTensorsInContainer(e.value),n=this.transform(e.value),r=hr.getTensorsInContainer(n);for(let a of t)hr.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},gre=class extends Gt{constructor(e,t){super();this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},a6=class extends Gt{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=hr.getTensorsInContainer(e.value),n=await this.transform(e.value),r=hr.getTensorsInContainer(n);for(let a of t)hr.isTensorInList(a,r)||a.dispose();return{value:n,done:!1}}},jg=class extends Gt{constructor(){super();this.outputQueue=new Ug,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},xre=class extends jg{constructor(e,t){super();this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=hr.getTensorsInContainer(e.value),n=this.transform(e.value),r=hr.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let a of t)hr.isTensorInList(a,r)||a.dispose();return!0}},r6=class extends Gt{constructor(e,t){super();this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}},Wa;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(Wa||(Wa={}));var cre=class extends Gt{constructor(e,t=Wa.FAIL){super();this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function r(s){return s instanceof Gt?{value:s.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let a=await e6(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case Wa.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case Wa.SHORTEST:return{value:null,done:!0};case Wa.LONGEST:default:}return this.count++,{value:a,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},s6=class extends Gt{constructor(e,t){super();this.upstream=e,this.bufferSize=t,this.buffer=new t6(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},wre=class extends s6{constructor(e,t,n){super(e,t);this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=ere.alea(n||k.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(t.done)this.upstreamExhausted=!0;else return this.refill(),t}return{value:null,done:!0}}},Rl=class{constructor(){this.size=null}batch(e,t=!0){let n=this;k.assert(e>0,()=>`batchSize needs to be positive, but it is
|
|
${e}`);let r;return this.size===Infinity||this.size==null?r=this.size:t?r=Math.ceil(this.size/e):r=Math.floor(this.size/e),Mn(async()=>(await n.iterator()).columnMajorBatch(e,t,_re),r)}concatenate(e){let t=this,n;return this.size===Infinity||e.size===Infinity?n=Infinity:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,Mn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===Infinity?n=Infinity:n=null,Mn(async()=>(await t.iterator()).filter(r=>U(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Mn(async()=>(await t.iterator()).map(n=>U(()=>e(n))),this.size)}mapAsync(e){let t=this;return Mn(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return Mn(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=Infinity:n=null,Mn(async()=>{let r=Hg(async()=>({value:await t.iterator(),done:!1}));return ure(r.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size<e||e===void 0||e<0)?n=0:n=null,Mn(async()=>(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let r=this,a=Qne.alea(t||k.now().toString());return Mn(async()=>{let s=a.int32();return n&&(s+=a.int32()),(await r.iterator()).shuffle(e,s.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,Mn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===Infinity)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Rl.MAX_BUFFER_SIZE=1e4;function Mn(e,t=null){return new class extends Rl{constructor(){super(...arguments);this.size=t}async iterator(){return e()}}}function jne(e){return Mn(async()=>n6(e),e.length)}function Gne(e){if(!Fl(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n<e.length;n++)t=t==null?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=t==null?e[n].size:Math.min(t,e[n].size);return Mn(async()=>{let n=await e6(e,r=>{if(r instanceof Rl)return{value:r.iterator(),recurse:!1};if(Fl(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return hre(n,Wa.SHORTEST)},t)}function _re(e){if(e===null)return null;let t=e[0];return are(t)?{value:bre(e),recurse:!1}:{value:null,recurse:!0}}function bre(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof et?Sn(e):dr(e)}var X7=class extends Rl{constructor(e){super();this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
|
|
`).map(e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e))}},n1='"',Pc=Symbol("out"),i6=Symbol("field"),r1=Symbol("quote"),Gg=Symbol("quoteafterquote"),o6=Symbol("quoteinquote"),K7=class extends Rl{constructor(e,t){super();this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new X7(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(k.assert(t.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&k.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((r,a)=>(r[a]=r[a]+1||1,r),{}),n=Object.keys(t).filter(r=>t[r]>1);if(k.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let r of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(r)===-1)throw new Error('The key "'+r+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},r={};for(let a=0;a<this.fullColumnNames.length;a++){let s=this.fullColumnNames[a],i=this.columnConfigs?this.columnConfigs[s]:null;if(!(this.configuredColumnsOnly&&!i)){let o=t[a],l=null;if(o==="")if(i&&i.default!==void 0)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let c=Number(o);if(isNaN(c))i&&i.dtype==="bool"?l=this.getBoolean(o):l=o;else if(!i||!i.dtype)l=c;else switch(i.dtype){case"float32":l=c;break;case"int32":l=Math.floor(c);break;case"bool":l=this.getBoolean(o);break;default:l=c}}i&&i.isLabel?r[s]=l:n[s]=l}}return Object.keys(r).length===0?n:{xs:n,ys:r}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],r=0,a=e.length,s=Pc;for(let i=0;i<a;i++)switch(s){case Pc:switch(e.charAt(i)){case n1:r=i+1,s=r1;break;case this.delimiter:if(r=i+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),s=Pc;break;default:s=i6,r=i;break}break;case i6:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i)),s=Pc,r=i+1;break;default:}break;case r1:switch(e.charAt(i)){case n1:s=Gg;break;default:}break;case Gg:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(r,i-1)),s=Pc,r=i+1;break;case n1:s=r1;break;default:s=o6;break}break;case o6:switch(e.charAt(i)){case n1:s=r1;break;default:}break;default:}if(s===Gg?n.push(e.substring(r,a-1)):n.push(e.substring(r)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},l6=class extends Gt{constructor(e){super();this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);if(this.fftSize<0||t<4||t>14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(Q().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");let t=new l6(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let r=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(r,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let r=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(r,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(r=>{let a=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-Infinity&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(a),r({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((r,a)=>n.set(r,a*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(k.sizeFromShape(t));return n.set(e,n.length-e.length),dr(n,t)}},u6=class extends Gt{constructor(e,t){super();if(this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=Qt([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,r=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,a=(1-n)/2,s=(1-r)/2,i=a+n,o=r+s;this.cropBox=pr([s,a,o,i],[1,4])}else this.cropBox=pr([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(Q().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new u6(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&k.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`);try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=bu.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return U(()=>{let t=vn(ye(e,"float32"),0),n;n=St.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=n.shape;return q(n,r.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},c6=class{},h6=class extends Gt{split(e){return new vre(this,e)}},vre=class extends h6{constructor(e,t){super();this.upstream=e,this.impl=new kre(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},kre=class extends jg{constructor(e,t){super();this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let n of t.slice(0,-1))this.outputQueue.push(n);return this.carryover=t[t.length-1],!0}},Nre=class extends Gt{decodeUTF8(){return new Ire(this)}},Ire=class extends h6{constructor(e){super();this.upstream=e,this.impl=new Sre(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Sre=class extends jg{constructor(e){super();if(this.upstream=e,Q().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=Ck();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return Q().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},d6=class extends Nre{constructor(e,t={}){super();this.file=e,this.options=t,k.assert(e instanceof Uint8Array||(Q().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let r=new FileReader;r.onload=s=>{let i=r.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(i)},r.onabort=s=>t(new Error("Aborted")),r.onerror=s=>t(new Error(s.type));let a=this.file.slice(this.offset,n);r.readAsArrayBuffer(a)}this.offset=n}),done:!1}}};async function Ere(e,t={}){let n,r;typeof e=="string"?n=e:(n=e.url,r=Tre(e));let a=await k.fetch(n,r);if(a.ok){let s=new Uint8Array(await a.arrayBuffer());return new d6(s,t)}else throw new Error(a.statusText)}var Tre=e=>({method:e.method,headers:e.headers,body:e.body,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity});function p6(e){return typeof e=="string"&&e.substr(0,7)==="file://"}var Z7=class extends c6{constructor(e,t={}){super();this.input=e,this.options=t}async iterator(){if(p6(this.input)&&Q().get("IS_NODE")){let e=require("fs");this.input=e.readFileSync(this.input.substr(7))}return new d6(this.input,this.options)}},J7=class extends c6{constructor(e,t={}){super();this.url=e,this.fileOptions=t}async iterator(){return p6(this.url)?new Z7(this.url,this.fileOptions).iterator():Ere(this.url,this.fileOptions)}};function qne(e,t={}){return new K7(new J7(e),t)}function Xne(e){let t=Hg(e);return Mn(async()=>t)}function Kne(e){return Mn(async()=>{let t=await e();return Hg(()=>t.next())})}async function Zne(e,t){return u6.create(e,t)}async function Jne(e){return l6.create(e)}var Yne="3.1.0",X8={tfjs:Rk,"tfjs-core":Fk,"tfjs-data":Mk,"tfjs-layers":$k,"tfjs-converter":Dk,"tfjs-backend-cpu":_0,"tfjs-backend-webgl":k0,"tfjs-backend-wasm":S0},cn={name:"humangl",priority:99,canvas:null,gl:null,width:1024,height:1024,webGLattr:{alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!1,desynchronized:!0}};function Cre(){if(!G2(cn.name)){Ue("backend registration:",cn.name);try{cn.canvas=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(cn.width,cn.height):document.createElement("canvas")}catch(e){Ue("error: cannot create canvas:",e);return}try{cn.gl=cn.canvas.getContext("webgl2",cn.webGLattr)}catch(e){Ue("error: cannot get WebGL2 context:",e);return}try{mm(2,cn.gl)}catch(e){Ue("error: cannot set WebGL2 context:",e);return}try{let e=new Am(cn.gl);vu(cn.name,()=>new Vu(e),cn.priority)}catch(e){Ue("error: cannot register WebGL backend:",e);return}try{wu("webgl").forEach(e=>{let t={...e,backendName:cn.name};Lo(t)})}catch(e){Ue("error: cannot update WebGL backend registration:",e);return}try{pa.set("WEBGL_VERSION",2),pa.set("WEBGL_MAX_TEXTURE_SIZE",cn.gl.getParameter(cn.gl.MAX_TEXTURE_SIZE)),pa.set("WEBGL_FORCE_F16_TEXTURES",!0),pa.set("WEBGL_PACK_DEPTHWISECONV",!0)}catch(e){Ue("error: cannot set WebGL backend flags:",e);return}Ue("backend registered:",cn.name)}}var f6=6;function Rre(e){let t={strides:[e/16,e/8],anchors:[2,6]},n=[];for(let r=0;r<t.strides.length;r++){let a=t.strides[r],s=Math.floor((e+a-1)/a),i=Math.floor((e+a-1)/a),o=t.anchors[r];for(let l=0;l<s;l++){let c=a*(l+.5);for(let u=0;u<i;u++){let h=a*(u+.5);for(let d=0;d<o;d++)n.push([h,c])}}}return n}var Fre=e=>({startEndTensor:e,startPoint:Me(e,[0,0],[-1,2]),endPoint:Me(e,[0,2],[-1,2])});function Mre(e,t,n){let r=Me(e,[0,1],[-1,2]),a=oe(r,t),s=Me(e,[0,3],[-1,2]),i=Ne(s,n),o=Ne(a,n),l=Ne(i,2),c=we(o,l),u=oe(o,l),h=L(c,n),d=L(u,n);return ed([h,d],1)}var $re=class{constructor(e,t){this.blazeFaceModel=e,this.width=t.face.detector.inputSize,this.height=t.face.detector.inputSize,this.anchorsData=Rre(t.face.detector.inputSize),this.anchors=pr(this.anchorsData),this.inputSize=Qt([this.width,this.height]),this.config=t,this.scaleFaces=.8}async getBoundingBoxes(e){if(!e||e.isDisposedInternal||e.shape.length!==4||e.shape[1]<1||e.shape[2]<1)return null;let[t,n,r]=U(()=>{let c=e.resizeBilinear([this.width,this.height]),u=we(c.div(127.5),1),h=this.blazeFaceModel.predict(u),d;if(Array.isArray(h)){let A=h.sort((b,x)=>b.size-x.size),y=ct([A[0],A[2]],2),g=ct([A[1],A[3]],2);d=ct([g,y],1).squeeze(0)}else d=h.squeeze();let p=Mre(d,this.anchors,this.inputSize),f=Me(d,[0,0],[-1,1]),m=Yn(f).squeeze();return[d,p,m]}),a=await St.nonMaxSuppressionAsync(n,r,this.config.face.detector.maxFaces,this.config.face.detector.iouThreshold,this.config.face.detector.scoreThreshold),s=a.arraySync();a.dispose();let i=s.map(c=>Me(n,[c,0],[1,-1])).map(c=>{let u=c.arraySync();return c.dispose(),u}),o=r.dataSync(),l=[];for(let c=0;c<i.length;c++){let u=s[c],h=o[u];if(h>this.config.face.detector.minConfidence){let d=Fre(i[c]),p=this.anchorsData[u],f=U(()=>Me(t,[u,f6-1],[1,-1]).squeeze().reshape([f6,-1]));l.push({box:d,landmarks:f,anchor:p,confidence:h})}}return t.dispose(),n.dispose(),r.dispose(),t.dispose(),{boxes:l,scaleFactor:[e.shape[2]/this.width,e.shape[1]/this.height]}}};async function U4(e){let t=await Zn(e.face.detector.modelPath,{fromTFHub:e.face.detector.modelPath.includes("tfhub.dev")}),n=new $re(t,e);return Ue(`load model: ${e.face.detector.modelPath.match(/\/(.*)\./)[1]}`),n}function Dre(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]];return{startPoint:n,endPoint:r}}function a1(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function s1(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function m6(e,t,n){let r=t.shape[1],a=t.shape[2],s=[[e.startPoint[1]/r,e.startPoint[0]/a,e.endPoint[1]/r,e.endPoint[0]/a]];return St.cropAndResize(t,s,[0],n)}function qg(e,t=1.5){let n=s1(e),r=a1(e),a=[t*r[0]/2,t*r[1]/2],s=[n[0]-a[0],n[1]-a[1]],i=[n[0]+a[0],n[1]+a[1]];return{startPoint:s,endPoint:i,landmarks:e.landmarks}}function Xg(e){let t=s1(e),n=a1(e),r=Math.max(...n)/2,a=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:s,landmarks:e.landmarks}}var Kg=[[1,0,0],[0,1,0],[0,0,1]];function Ore(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function zre(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Ore(n)}function A6(e,t){return[[1,0,e],[0,1,t],[0,0,1]]}function _i(e,t){let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}function Pre(e,t){let n=[];for(let r=0;r<e.length;r++)n.push(e[r][t]);return n}function y6(e,t){let n=[],r=e.length;for(let a=0;a<r;a++){n.push([]);for(let s=0;s<r;s++)n[a].push(_i(e[a],Pre(t,s)))}return n}function g6(e,t){let n=Math.cos(e),r=Math.sin(e),a=[[n,-r,0],[r,n,0],[0,0,1]],s=A6(t[0],t[1]),i=y6(s,a),o=A6(-t[0],-t[1]);return y6(i,o)}function Lre(e){let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-_i(t[0],n),-_i(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]}function Wre(e,t){return[_i(e,t[0]),_i(e,t[1])]}var da={silhouette:[10,338,297,332,284,251,389,356,454,323,361,288,397,365,379,378,400,377,152,148,176,149,150,136,172,58,132,93,234,127,162,21,54,103,67,109],lipsUpperOuter:[61,185,40,39,37,0,267,269,270,409,291],lipsLowerOuter:[146,91,181,84,17,314,405,321,375,291],lipsUpperInner:[78,191,80,81,82,13,312,311,310,415,308],lipsLowerInner:[78,95,88,178,87,14,317,402,318,324,308],rightEyeUpper0:[246,161,160,159,158,157,173],rightEyeLower0:[33,7,163,144,145,153,154,155,133],rightEyeUpper1:[247,30,29,27,28,56,190],rightEyeLower1:[130,25,110,24,23,22,26,112,243],rightEyeUpper2:[113,225,224,223,222,221,189],rightEyeLower2:[226,31,228,229,230,231,232,233,244],rightEyeLower3:[143,111,117,118,119,120,121,128,245],rightEyebrowUpper:[156,70,63,105,66,107,55,193],rightEyebrowLower:[35,124,46,53,52,65],rightEyeIris:[473,474,475,476,477],leftEyeUpper0:[466,388,387,386,385,384,398],leftEyeLower0:[263,249,390,373,374,380,381,382,362],leftEyeUpper1:[467,260,259,257,258,286,414],leftEyeLower1:[359,255,339,254,253,252,256,341,463],leftEyeUpper2:[342,445,444,443,442,441,413],leftEyeLower2:[446,261,448,449,450,451,452,453,464],leftEyeLower3:[372,340,346,347,348,349,350,357,465],leftEyebrowUpper:[383,300,293,334,296,336,285,417],leftEyebrowLower:[265,353,276,283,282,295],leftEyeIris:[468,469,470,471,472],midwayBetweenEyes:[168],noseTip:[1],noseBottom:[2],noseRightCorner:[98],noseLeftCorner:[327],rightCheek:[205],leftCheek:[425]},x6=[{key:"EyeUpper0",indices:[9,10,11,12,13,14,15]},{key:"EyeUpper1",indices:[25,26,27,28,29,30,31]},{key:"EyeUpper2",indices:[41,42,43,44,45,46,47]},{key:"EyeLower0",indices:[0,1,2,3,4,5,6,7,8]},{key:"EyeLower1",indices:[16,17,18,19,20,21,22,23,24]},{key:"EyeLower2",indices:[32,33,34,35,36,37,38,39,40]},{key:"EyeLower3",indices:[54,55,56,57,58,59,60,61,62]}],Zg=[[.499976992607117,.652534008026123],[.500025987625122,.547487020492554],[.499974012374878,.602371990680695],[.482113003730774,.471979022026062],[.500150978565216,.527155995368958],[.499909996986389,.498252987861633],[.499523013830185,.40106201171875],[.289712011814117,.380764007568359],[.499954998493195,.312398016452789],[.499987006187439,.269918978214264],[.500023007392883,.107050001621246],[.500023007392883,.666234016418457],[.5000159740448,.679224014282227],[.500023007392883,.692348003387451],[.499976992607117,.695277988910675],[.499976992607117,.70593398809433],[.499976992607117,.719385027885437],[.499976992607117,.737019002437592],[.499967992305756,.781370997428894],[.499816000461578,.562981009483337],[.473773002624512,.573909997940063],[.104906998574734,.254140973091125],[.365929991006851,.409575998783112],[.338757991790771,.41302502155304],[.311120003461838,.409460008144379],[.274657994508743,.389131009578705],[.393361985683441,.403706014156342],[.345234006643295,.344011008739471],[.370094001293182,.346076011657715],[.319321990013123,.347265005111694],[.297903001308441,.353591024875641],[.24779200553894,.410809993743896],[.396889001131058,.842755019664764],[.280097991228104,.375599980354309],[.106310002505779,.399955987930298],[.2099249958992,.391353011131287],[.355807989835739,.534406006336212],[.471751004457474,.65040397644043],[.474155008792877,.680191993713379],[.439785003662109,.657229006290436],[.414617002010345,.66654098033905],[.450374007225037,.680860996246338],[.428770989179611,.682690978050232],[.374971002340317,.727805018424988],[.486716985702515,.547628998756409],[.485300987958908,.527395009994507],[.257764995098114,.314490020275116],[.401223003864288,.455172002315521],[.429818987846375,.548614978790283],[.421351999044418,.533740997314453],[.276895999908447,.532056987285614],[.483370006084442,.499586999416351],[.33721199631691,.282882988452911],[.296391993761063,.293242990970612],[.169294998049736,.193813979625702],[.447580009698868,.302609980106354],[.392390012741089,.353887975215912],[.354490011930466,.696784019470215],[.067304998636246,.730105042457581],[.442739009857178,.572826027870178],[.457098007202148,.584792017936707],[.381974011659622,.694710969924927],[.392388999462128,.694203019142151],[.277076005935669,.271932005882263],[.422551989555359,.563233017921448],[.385919004678726,.281364023685455],[.383103013038635,.255840003490448],[.331431001424789,.119714021682739],[.229923993349075,.232002973556519],[.364500999450684,.189113974571228],[.229622006416321,.299540996551514],[.173287004232407,.278747975826263],[.472878992557526,.666198015213013],[.446828007698059,.668527007102966],[.422762006521225,.673889994621277],[.445307999849319,.580065965652466],[.388103008270264,.693961024284363],[.403039008378983,.706539988517761],[.403629004955292,.693953037261963],[.460041999816895,.557139039039612],[.431158006191254,.692366003990173],[.452181994915009,.692366003990173],[.475387006998062,.692366003990173],[.465828001499176,.779190003871918],[.472328990697861,.736225962638855],[.473087012767792,.717857003211975],[.473122000694275,.704625964164734],[.473033010959625,.695277988910675],[.427942007780075,.695277988910675],[.426479011774063,.703539967536926],[.423162013292313,.711845993995667],[.4183090031147,.720062971115112],[.390094995498657,.639572978019714],[.013953999616206,.560034036636353],[.499913990497589,.58014702796936],[.413199990987778,.69539999961853],[.409626007080078,.701822996139526],[.468080013990402,.601534962654114],[.422728985548019,.585985004901886],[.463079988956451,.593783974647522],[.37211999297142,.47341400384903],[.334562003612518,.496073007583618],[.411671012639999,.546965003013611],[.242175996303558,.14767599105835],[.290776997804642,.201445996761322],[.327338010072708,.256527006626129],[.399509996175766,.748921036720276],[.441727995872498,.261676013469696],[.429764986038208,.187834024429321],[.412198007106781,.108901023864746],[.288955003023148,.398952007293701],[.218936994671822,.435410976409912],[.41278201341629,.398970007896423],[.257135003805161,.355440020561218],[.427684992551804,.437960982322693],[.448339998722076,.536936044692993],[.178560003638268,.45755398273468],[.247308000922203,.457193970680237],[.286267012357712,.467674970626831],[.332827985286713,.460712015628815],[.368755996227264,.447206974029541],[.398963987827301,.432654976844788],[.476410001516342,.405806005001068],[.189241006970406,.523923993110657],[.228962004184723,.348950982093811],[.490725994110107,.562400996685028],[.404670000076294,.485132992267609],[.019469000399113,.401564002037048],[.426243007183075,.420431017875671],[.396993011236191,.548797011375427],[.266469985246658,.376977026462555],[.439121007919312,.51895797252655],[.032313998788595,.644356966018677],[.419054001569748,.387154996395111],[.462783008813858,.505746960639954],[.238978996872902,.779744982719421],[.198220998048782,.831938028335571],[.107550002634525,.540755033493042],[.183610007166862,.740257024765015],[.134409993886948,.333683013916016],[.385764002799988,.883153975009918],[.490967005491257,.579378008842468],[.382384985685349,.508572995662689],[.174399003386497,.397670984268188],[.318785011768341,.39623498916626],[.343364000320435,.400596976280212],[.396100014448166,.710216999053955],[.187885001301765,.588537991046906],[.430987000465393,.944064974784851],[.318993002176285,.898285031318665],[.266247987747192,.869701027870178],[.500023007392883,.190576016902924],[.499976992607117,.954452991485596],[.366169989109039,.398822009563446],[.393207013607025,.39553701877594],[.410373002290726,.391080021858215],[.194993004202843,.342101991176605],[.388664990663528,.362284004688263],[.365961998701096,.355970978736877],[.343364000320435,.355356991291046],[.318785011768341,.35834002494812],[.301414996385574,.363156020641327],[.058132998645306,.319076001644135],[.301414996385574,.387449026107788],[.499987989664078,.618434011936188],[.415838003158569,.624195992946625],[.445681989192963,.566076993942261],[.465844005346298,.620640993118286],[.49992299079895,.351523995399475],[.288718998432159,.819945991039276],[.335278987884521,.852819979190826],[.440512001514435,.902418971061707],[.128294005990028,.791940987110138],[.408771991729736,.373893976211548],[.455606997013092,.451801002025604],[.499877005815506,.908990025520325],[.375436991453171,.924192011356354],[.11421000212431,.615022003650665],[.448662012815475,.695277988910675],[.4480200111866,.704632043838501],[.447111994028091,.715808033943176],[.444831997156143,.730794012546539],[.430011987686157,.766808986663818],[.406787008047104,.685672998428345],[.400738000869751,.681069016456604],[.392399996519089,.677703022956848],[.367855995893478,.663918972015381],[.247923001646996,.601333022117615],[.452769994735718,.420849978923798],[.43639200925827,.359887003898621],[.416164010763168,.368713974952698],[.413385987281799,.692366003990173],[.228018000721931,.683571994304657],[.468268007040024,.352671027183533],[.411361992359161,.804327011108398],[.499989002943039,.469825029373169],[.479153990745544,.442654013633728],[.499974012374878,.439637005329132],[.432112008333206,.493588984012604],[.499886006116867,.866917014122009],[.49991300702095,.821729004383087],[.456548988819122,.819200992584229],[.344549000263214,.745438992977142],[.37890899181366,.574010014533997],[.374292999505997,.780184984207153],[.319687992334366,.570737957954407],[.357154995203018,.604269981384277],[.295284003019333,.621580958366394],[.447750002145767,.862477004528046],[.410986006259918,.508723020553589],[.31395098567009,.775308012962341],[.354128003120422,.812552988529205],[.324548006057739,.703992962837219],[.189096003770828,.646299958229065],[.279776990413666,.71465802192688],[.1338230073452,.682700991630554],[.336768001317978,.644733011722565],[.429883986711502,.466521978378296],[.455527991056442,.548622965812683],[.437114000320435,.558896005153656],[.467287987470627,.529924988746643],[.414712011814117,.335219979286194],[.37704598903656,.322777986526489],[.344107985496521,.320150971412659],[.312875986099243,.32233202457428],[.283526003360748,.333190023899078],[.241245999932289,.382785975933075],[.102986000478268,.468762993812561],[.267612010240555,.424560010433197],[.297879010438919,.433175981044769],[.333433985710144,.433878004550934],[.366427004337311,.426115989685059],[.396012008190155,.416696012020111],[.420121014118195,.41022801399231],[.007561000064015,.480777025222778],[.432949006557465,.569517970085144],[.458638995885849,.479089021682739],[.473466008901596,.545744001865387],[.476087987422943,.563830018043518],[.468472003936768,.555056989192963],[.433990985155106,.582361996173859],[.483518004417419,.562983989715576],[.482482999563217,.57784903049469],[.42645001411438,.389798998832703],[.438998997211456,.39649498462677],[.450067013502121,.400434017181396],[.289712011814117,.368252992630005],[.276670008897781,.363372981548309],[.517862021923065,.471948027610779],[.710287988185883,.380764007568359],[.526226997375488,.573909997940063],[.895093023777008,.254140973091125],[.634069979190826,.409575998783112],[.661242008209229,.41302502155304],[.688880026340485,.409460008144379],[.725341975688934,.389131009578705],[.606630027294159,.40370500087738],[.654766023159027,.344011008739471],[.629905998706818,.346076011657715],[.680678009986877,.347265005111694],[.702096998691559,.353591024875641],[.75221198797226,.410804986953735],[.602918028831482,.842862963676453],[.719901978969574,.375599980354309],[.893692970275879,.399959981441498],[.790081977844238,.391354024410248],[.643998026847839,.534487962722778],[.528249025344849,.65040397644043],[.525849997997284,.680191040039062],[.560214996337891,.657229006290436],[.585384011268616,.66654098033905],[.549625992774963,.680860996246338],[.57122802734375,.682691991329193],[.624852001667023,.72809898853302],[.513050019741058,.547281980514526],[.51509702205658,.527251958847046],[.742246985435486,.314507007598877],[.598631024360657,.454979002475739],[.570338010787964,.548575043678284],[.578631997108459,.533622980117798],[.723087012767792,.532054007053375],[.516445994377136,.499638974666595],[.662801027297974,.282917976379395],[.70362401008606,.293271005153656],[.830704987049103,.193813979625702],[.552385985851288,.302568018436432],[.607609987258911,.353887975215912],[.645429015159607,.696707010269165],[.932694971561432,.730105042457581],[.557260990142822,.572826027870178],[.542901992797852,.584792017936707],[.6180260181427,.694710969924927],[.607590973377228,.694203019142151],[.722943007946014,.271963000297546],[.577413976192474,.563166975975037],[.614082992076874,.281386971473694],[.616907000541687,.255886018276215],[.668509006500244,.119913995265961],[.770092010498047,.232020974159241],[.635536015033722,.189248979091644],[.77039098739624,.299556016921997],[.826722025871277,.278755009174347],[.527121007442474,.666198015213013],[.553171992301941,.668527007102966],[.577238023281097,.673889994621277],[.554691970348358,.580065965652466],[.611896991729736,.693961024284363],[.59696102142334,.706539988517761],[.596370995044708,.693953037261963],[.539958000183105,.557139039039612],[.568841993808746,.692366003990173],[.547818005084991,.692366003990173],[.52461302280426,.692366003990173],[.534089982509613,.779141008853912],[.527670979499817,.736225962638855],[.526912987232208,.717857003211975],[.526877999305725,.704625964164734],[.526966989040375,.695277988910675],[.572058022022247,.695277988910675],[.573521018028259,.703539967536926],[.57683801651001,.711845993995667],[.581691026687622,.720062971115112],[.609944999217987,.639909982681274],[.986046016216278,.560034036636353],[.5867999792099,.69539999961853],[.590372025966644,.701822996139526],[.531915009021759,.601536989212036],[.577268004417419,.585934996604919],[.536915004253387,.593786001205444],[.627542972564697,.473352015018463],[.665585994720459,.495950996875763],[.588353991508484,.546862006187439],[.757824003696442,.14767599105835],[.709249973297119,.201507985591888],[.672684013843536,.256581008434296],[.600408971309662,.74900496006012],[.55826598405838,.261672019958496],[.570303976535797,.187870979309082],[.588165998458862,.109044015407562],[.711045026779175,.398952007293701],[.781069993972778,.435405015945435],[.587247014045715,.398931980133057],[.742869973182678,.355445981025696],[.572156012058258,.437651991844177],[.55186802148819,.536570012569427],[.821442008018494,.457556009292603],[.752701997756958,.457181990146637],[.71375697851181,.467626988887787],[.66711300611496,.460672974586487],[.631101012229919,.447153985500336],[.6008620262146,.432473003864288],[.523481011390686,.405627012252808],[.810747981071472,.523926019668579],[.771045982837677,.348959028720856],[.509127020835876,.562718033790588],[.595292985439301,.485023975372314],[.980530977249146,.401564002037048],[.573499977588654,.420000016689301],[.602994978427887,.548687994480133],[.733529984951019,.376977026462555],[.560611009597778,.519016981124878],[.967685997486115,.644356966018677],[.580985009670258,.387160003185272],[.537728011608124,.505385041236877],[.760966002941132,.779752969741821],[.801778972148895,.831938028335571],[.892440974712372,.54076099395752],[.816350996494293,.740260004997253],[.865594983100891,.333687007427216],[.614073991775513,.883246004581451],[.508952975273132,.579437971115112],[.617941975593567,.508316040039062],[.825608015060425,.397674977779388],[.681214988231659,.39623498916626],[.656635999679565,.400596976280212],[.603900015354156,.710216999053955],[.81208598613739,.588539004325867],[.56801301240921,.944564998149872],[.681007981300354,.898285031318665],[.733752012252808,.869701027870178],[.633830010890961,.398822009563446],[.606792986392975,.39553701877594],[.589659988880157,.391062021255493],[.805015981197357,.342108011245728],[.611334979534149,.362284004688263],[.634037971496582,.355970978736877],[.656635999679565,.355356991291046],[.681214988231659,.35834002494812],[.698584973812103,.363156020641327],[.941866993904114,.319076001644135],[.698584973812103,.387449026107788],[.584177017211914,.624107003211975],[.554318010807037,.566076993942261],[.534153997898102,.62064003944397],[.711217999458313,.819975018501282],[.664629995822906,.852871000766754],[.559099972248077,.902631998062134],[.871706008911133,.791940987110138],[.591234028339386,.373893976211548],[.544341027736664,.451583981513977],[.624562978744507,.924192011356354],[.88577002286911,.615028977394104],[.551338016986847,.695277988910675],[.551980018615723,.704632043838501],[.552887976169586,.715808033943176],[.555167973041534,.730794012546539],[.569944024085999,.767035007476807],[.593203008174896,.685675978660583],[.599261999130249,.681069016456604],[.607599973678589,.677703022956848],[.631937980651855,.663500010967255],[.752032995223999,.601315021514893],[.547226011753082,.420395016670227],[.563543975353241,.359827995300293],[.583841025829315,.368713974952698],[.586614012718201,.692366003990173],[.771915018558502,.683578014373779],[.531597018241882,.352482974529266],[.588370978832245,.804440975189209],[.52079701423645,.442565023899078],[.567984998226166,.493479013442993],[.543282985687256,.819254994392395],[.655317008495331,.745514988899231],[.621008992195129,.574018001556396],[.625559985637665,.78031200170517],[.680198013782501,.570719003677368],[.64276397228241,.604337990283966],[.704662978649139,.621529996395111],[.552012026309967,.862591981887817],[.589071989059448,.508637011051178],[.685944974422455,.775357007980347],[.645735025405884,.812640011310577],[.675342977046967,.703978002071381],[.810858011245728,.646304965019226],[.72012197971344,.714666962623596],[.866151988506317,.682704985141754],[.663187026977539,.644596993923187],[.570082008838654,.466325998306274],[.544561982154846,.548375964164734],[.562758982181549,.558784961700439],[.531987011432648,.530140042304993],[.585271000862122,.335177004337311],[.622952997684479,.32277899980545],[.655896008014679,.320163011550903],[.687132000923157,.322345972061157],[.716481983661652,.333200991153717],[.758756995201111,.382786989212036],[.897013008594513,.468769013881683],[.732392013072968,.424547016620636],[.70211398601532,.433162987232208],[.66652500629425,.433866024017334],[.633504986763,.426087975502014],[.603875994682312,.416586995124817],[.579657971858978,.409945011138916],[.992439985275269,.480777025222778],[.567192018032074,.569419980049133],[.54136598110199,.478899002075195],[.526564002037048,.546118021011353],[.523913025856018,.563830018043518],[.531529009342194,.555056989192963],[.566035985946655,.582329034805298],[.51631098985672,.563053965568542],[.5174720287323,.577877044677734],[.573594987392426,.389806985855103],[.560697972774506,.395331978797913],[.549755990505219,.399751007556915],[.710287988185883,.368252992630005],[.723330020904541,.363372981548309]],H4=[127,34,139,11,0,37,232,231,120,72,37,39,128,121,47,232,121,128,104,69,67,175,171,148,157,154,155,118,50,101,73,39,40,9,151,108,48,115,131,194,204,211,74,40,185,80,42,183,40,92,186,230,229,118,202,212,214,83,18,17,76,61,146,160,29,30,56,157,173,106,204,194,135,214,192,203,165,98,21,71,68,51,45,4,144,24,23,77,146,91,205,50,187,201,200,18,91,106,182,90,91,181,85,84,17,206,203,36,148,171,140,92,40,39,193,189,244,159,158,28,247,246,161,236,3,196,54,68,104,193,168,8,117,228,31,189,193,55,98,97,99,126,47,100,166,79,218,155,154,26,209,49,131,135,136,150,47,126,217,223,52,53,45,51,134,211,170,140,67,69,108,43,106,91,230,119,120,226,130,247,63,53,52,238,20,242,46,70,156,78,62,96,46,53,63,143,34,227,173,155,133,123,117,111,44,125,19,236,134,51,216,206,205,154,153,22,39,37,167,200,201,208,36,142,100,57,212,202,20,60,99,28,158,157,35,226,113,160,159,27,204,202,210,113,225,46,43,202,204,62,76,77,137,123,116,41,38,72,203,129,142,64,98,240,49,102,64,41,73,74,212,216,207,42,74,184,169,170,211,170,149,176,105,66,69,122,6,168,123,147,187,96,77,90,65,55,107,89,90,180,101,100,120,63,105,104,93,137,227,15,86,85,129,102,49,14,87,86,55,8,9,100,47,121,145,23,22,88,89,179,6,122,196,88,95,96,138,172,136,215,58,172,115,48,219,42,80,81,195,3,51,43,146,61,171,175,199,81,82,38,53,46,225,144,163,110,246,33,7,52,65,66,229,228,117,34,127,234,107,108,69,109,108,151,48,64,235,62,78,191,129,209,126,111,35,143,163,161,246,117,123,50,222,65,52,19,125,141,221,55,65,3,195,197,25,7,33,220,237,44,70,71,139,122,193,245,247,130,33,71,21,162,153,158,159,170,169,150,188,174,196,216,186,92,144,160,161,2,97,167,141,125,241,164,167,37,72,38,12,145,159,160,38,82,13,63,68,71,226,35,111,158,153,154,101,50,205,206,92,165,209,198,217,165,167,97,220,115,218,133,112,243,239,238,241,214,135,169,190,173,133,171,208,32,125,44,237,86,87,178,85,86,179,84,85,180,83,84,181,201,83,182,137,93,132,76,62,183,61,76,184,57,61,185,212,57,186,214,207,187,34,143,156,79,239,237,123,137,177,44,1,4,201,194,32,64,102,129,213,215,138,59,166,219,242,99,97,2,94,141,75,59,235,24,110,228,25,130,226,23,24,229,22,23,230,26,22,231,112,26,232,189,190,243,221,56,190,28,56,221,27,28,222,29,27,223,30,29,224,247,30,225,238,79,20,166,59,75,60,75,240,147,177,215,20,79,166,187,147,213,112,233,244,233,128,245,128,114,188,114,217,174,131,115,220,217,198,236,198,131,134,177,132,58,143,35,124,110,163,7,228,110,25,356,389,368,11,302,267,452,350,349,302,303,269,357,343,277,452,453,357,333,332,297,175,152,377,384,398,382,347,348,330,303,304,270,9,336,337,278,279,360,418,262,431,304,408,409,310,415,407,270,409,410,450,348,347,422,430,434,313,314,17,306,307,375,387,388,260,286,414,398,335,406,418,364,367,416,423,358,327,251,284,298,281,5,4,373,374,253,307,320,321,425,427,411,421,313,18,321,405,406,320,404,405,315,16,17,426,425,266,377,400,369,322,391,269,417,465,464,386,257,258,466,260,388,456,399,419,284,332,333,417,285,8,346,340,261,413,441,285,327,460,328,355,371,329,392,439,438,382,341,256,429,420,360,364,394,379,277,343,437,443,444,283,275,440,363,431,262,369,297,338,337,273,375,321,450,451,349,446,342,467,293,334,282,458,461,462,276,353,383,308,324,325,276,300,293,372,345,447,382,398,362,352,345,340,274,1,19,456,248,281,436,427,425,381,256,252,269,391,393,200,199,428,266,330,329,287,273,422,250,462,328,258,286,384,265,353,342,387,259,257,424,431,430,342,353,276,273,335,424,292,325,307,366,447,345,271,303,302,423,266,371,294,455,460,279,278,294,271,272,304,432,434,427,272,407,408,394,430,431,395,369,400,334,333,299,351,417,168,352,280,411,325,319,320,295,296,336,319,403,404,330,348,349,293,298,333,323,454,447,15,16,315,358,429,279,14,15,316,285,336,9,329,349,350,374,380,252,318,402,403,6,197,419,318,319,325,367,364,365,435,367,397,344,438,439,272,271,311,195,5,281,273,287,291,396,428,199,311,271,268,283,444,445,373,254,339,263,466,249,282,334,296,449,347,346,264,447,454,336,296,299,338,10,151,278,439,455,292,407,415,358,371,355,340,345,372,390,249,466,346,347,280,442,443,282,19,94,370,441,442,295,248,419,197,263,255,359,440,275,274,300,383,368,351,412,465,263,467,466,301,368,389,380,374,386,395,378,379,412,351,419,436,426,322,373,390,388,2,164,393,370,462,461,164,0,267,302,11,12,374,373,387,268,12,13,293,300,301,446,261,340,385,384,381,330,266,425,426,423,391,429,355,437,391,327,326,440,457,438,341,382,362,459,457,461,434,430,394,414,463,362,396,369,262,354,461,457,316,403,402,315,404,403,314,405,404,313,406,405,421,418,406,366,401,361,306,408,407,291,409,408,287,410,409,432,436,410,434,416,411,264,368,383,309,438,457,352,376,401,274,275,4,421,428,262,294,327,358,433,416,367,289,455,439,462,370,326,2,326,370,305,460,455,254,449,448,255,261,446,253,450,449,252,451,450,256,452,451,341,453,452,413,464,463,441,413,414,258,442,441,257,443,442,259,444,443,260,445,444,467,342,445,459,458,250,289,392,290,290,328,460,376,433,435,250,290,392,411,416,433,341,463,464,453,464,465,357,465,412,343,412,399,360,363,440,437,399,456,420,456,363,401,435,288,372,383,353,339,255,249,448,261,255,133,243,190,133,155,112,33,246,247,33,130,25,398,384,286,362,398,414,362,463,341,263,359,467,263,249,255,466,467,260,75,60,166,238,239,79,162,127,139,72,11,37,121,232,120,73,72,39,114,128,47,233,232,128,103,104,67,152,175,148,173,157,155,119,118,101,74,73,40,107,9,108,49,48,131,32,194,211,184,74,185,191,80,183,185,40,186,119,230,118,210,202,214,84,83,17,77,76,146,161,160,30,190,56,173,182,106,194,138,135,192,129,203,98,54,21,68,5,51,4,145,144,23,90,77,91,207,205,187,83,201,18,181,91,182,180,90,181,16,85,17,205,206,36,176,148,140,165,92,39,245,193,244,27,159,28,30,247,161,174,236,196,103,54,104,55,193,8,111,117,31,221,189,55,240,98,99,142,126,100,219,166,218,112,155,26,198,209,131,169,135,150,114,47,217,224,223,53,220,45,134,32,211,140,109,67,108,146,43,91,231,230,120,113,226,247,105,63,52,241,238,242,124,46,156,95,78,96,70,46,63,116,143,227,116,123,111,1,44,19,3,236,51,207,216,205,26,154,22,165,39,167,199,200,208,101,36,100,43,57,202,242,20,99,56,28,157,124,35,113,29,160,27,211,204,210,124,113,46,106,43,204,96,62,77,227,137,116,73,41,72,36,203,142,235,64,240,48,49,64,42,41,74,214,212,207,183,42,184,210,169,211,140,170,176,104,105,69,193,122,168,50,123,187,89,96,90,66,65,107,179,89,180,119,101,120,68,63,104,234,93,227,16,15,85,209,129,49,15,14,86,107,55,9,120,100,121,153,145,22,178,88,179,197,6,196,89,88,96,135,138,136,138,215,172,218,115,219,41,42,81,5,195,51,57,43,61,208,171,199,41,81,38,224,53,225,24,144,110,105,52,66,118,229,117,227,34,234,66,107,69,10,109,151,219,48,235,183,62,191,142,129,126,116,111,143,7,163,246,118,117,50,223,222,52,94,19,141,222,221,65,196,3,197,45,220,44,156,70,139,188,122,245,139,71,162,145,153,159,149,170,150,122,188,196,206,216,92,163,144,161,164,2,167,242,141,241,0,164,37,11,72,12,144,145,160,12,38,13,70,63,71,31,226,111,157,158,154,36,101,205,203,206,165,126,209,217,98,165,97,237,220,218,237,239,241,210,214,169,140,171,32,241,125,237,179,86,178,180,85,179,181,84,180,182,83,181,194,201,182,177,137,132,184,76,183,185,61,184,186,57,185,216,212,186,192,214,187,139,34,156,218,79,237,147,123,177,45,44,4,208,201,32,98,64,129,192,213,138,235,59,219,141,242,97,97,2,141,240,75,235,229,24,228,31,25,226,230,23,229,231,22,230,232,26,231,233,112,232,244,189,243,189,221,190,222,28,221,223,27,222,224,29,223,225,30,224,113,247,225,99,60,240,213,147,215,60,20,166,192,187,213,243,112,244,244,233,245,245,128,188,188,114,174,134,131,220,174,217,236,236,198,134,215,177,58,156,143,124,25,110,7,31,228,25,264,356,368,0,11,267,451,452,349,267,302,269,350,357,277,350,452,357,299,333,297,396,175,377,381,384,382,280,347,330,269,303,270,151,9,337,344,278,360,424,418,431,270,304,409,272,310,407,322,270,410,449,450,347,432,422,434,18,313,17,291,306,375,259,387,260,424,335,418,434,364,416,391,423,327,301,251,298,275,281,4,254,373,253,375,307,321,280,425,411,200,421,18,335,321,406,321,320,405,314,315,17,423,426,266,396,377,369,270,322,269,413,417,464,385,386,258,248,456,419,298,284,333,168,417,8,448,346,261,417,413,285,326,327,328,277,355,329,309,392,438,381,382,256,279,429,360,365,364,379,355,277,437,282,443,283,281,275,363,395,431,369,299,297,337,335,273,321,348,450,349,359,446,467,283,293,282,250,458,462,300,276,383,292,308,325,283,276,293,264,372,447,346,352,340,354,274,19,363,456,281,426,436,425,380,381,252,267,269,393,421,200,428,371,266,329,432,287,422,290,250,328,385,258,384,446,265,342,386,387,257,422,424,430,445,342,276,422,273,424,306,292,307,352,366,345,268,271,302,358,423,371,327,294,460,331,279,294,303,271,304,436,432,427,304,272,408,395,394,431,378,395,400,296,334,299,6,351,168,376,352,411,307,325,320,285,295,336,320,319,404,329,330,349,334,293,333,366,323,447,316,15,315,331,358,279,317,14,316,8,285,9,277,329,350,253,374,252,319,318,403,351,6,419,324,318,325,397,367,365,288,435,397,278,344,439,310,272,311,248,195,281,375,273,291,175,396,199,312,311,268,276,283,445,390,373,339,295,282,296,448,449,346,356,264,454,337,336,299,337,338,151,294,278,455,308,292,415,429,358,355,265,340,372,388,390,466,352,346,280,295,442,282,354,19,370,285,441,295,195,248,197,457,440,274,301,300,368,417,351,465,251,301,389,385,380,386,394,395,379,399,412,419,410,436,322,387,373,388,326,2,393,354,370,461,393,164,267,268,302,12,386,374,387,312,268,13,298,293,301,265,446,340,380,385,381,280,330,425,322,426,391,420,429,437,393,391,326,344,440,438,458,459,461,364,434,394,428,396,262,274,354,457,317,316,402,316,315,403,315,314,404,314,313,405,313,421,406,323,366,361,292,306,407,306,291,408,291,287,409,287,432,410,427,434,411,372,264,383,459,309,457,366,352,401,1,274,4,418,421,262,331,294,358,435,433,367,392,289,439,328,462,326,94,2,370,289,305,455,339,254,448,359,255,446,254,253,449,253,252,450,252,256,451,256,341,452,414,413,463,286,441,414,286,258,441,258,257,442,257,259,443,259,260,444,260,467,445,309,459,250,305,289,290,305,290,460,401,376,435,309,250,392,376,411,433,453,341,464,357,453,465,343,357,412,437,343,399,344,360,440,420,437,456,360,420,363,361,401,288,265,372,353,390,339,249,339,448,255],Bre=[127,234,132,58,172,150,149,148,152,377,378,379,397,288,361,454,356,70,63,105,66,107,336,296,334,293,300,168,6,195,4,98,97,2,326,327,33,160,158,133,153,144,362,385,387,263,373,380,57,40,37,0,267,270,287,321,314,17,84,91,78,81,13,311,308,402,14,178],Vre=[33,133,362,263,1,62,308,159,145,386,374,6,102,331,2,13,14,70,105,107,336,334,300,54,10,284,50,280,234,454,58,288,152],Ure=[33,133,362,263,1,78,308],use=Bre.map(e=>Zg[e]),cse=Vre.map(e=>Zg[e]),hse=Ure.map(e=>Zg[e]),Hre=468,jre=13,Gre=[jre,da.midwayBetweenEyes[0]],qre=3,Xre=2,Kre=[qre,Xre],Jg=da.leftEyeLower0,Yg=[Jg[0],Jg[Jg.length-1]],Qg=da.rightEyeLower0,e2=[Qg[0],Qg[Qg.length-1]],Zre=3,Jre=4,Yre=71,t2=76;function i1(e,t,n,r=null){for(let a=0;a<x6.length;a++){let{key:s,indices:i}=x6[a],o=da[`${n}${s}`];if(!r||r.includes(s))for(let l=0;l<i.length;l++){let c=i[l];e[o[l]]=[t[c][0],t[c][1],(t[c][2]+e[o[l]][2])/2]}}}var j4=class{constructor(e,t,n,r){this.storedBoxes=[],this.runsWithoutFaceDetector=0,this.boundingBoxDetector=e,this.meshDetector=t,this.irisModel=n,this.meshWidth=r.face.mesh.inputSize,this.meshHeight=r.face.mesh.inputSize,this.irisSize=r.face.iris.inputSize,this.irisEnlarge=2.3,this.skipped=0,this.detectedFaces=0}transformRawCoords(e,t,n,r){let a=a1({startPoint:t.startPoint,endPoint:t.endPoint}),s=[a[0]/this.meshWidth,a[1]/this.meshHeight],i=e.map(h=>[s[0]*(h[0]-this.meshWidth/2),s[1]*(h[1]-this.meshHeight/2),h[2]]),o=n!==0?g6(n,[0,0]):Kg,l=n!==0?i.map(h=>[...Wre(h,o),h[2]]):i,c=n!==0?Lre(r):Kg,u=[...s1({startPoint:t.startPoint,endPoint:t.endPoint}),1];return l.map(h=>[h[0]+_i(u,c[0]),h[1]+_i(u,c[1]),h[2]])}getLeftToRightEyeDepthDifference(e){let t=e[Yg[0]][2],n=e[e2[0]][2];return t-n}getEyeBox(e,t,n,r,a=!1){let s=Xg(qg(this.calculateLandmarksBoundingBox([e[n],e[r]]),this.irisEnlarge)),i=a1(s),o=St.cropAndResize(t,[[s.startPoint[1]/this.meshHeight,s.startPoint[0]/this.meshWidth,s.endPoint[1]/this.meshHeight,s.endPoint[0]/this.meshWidth]],[0],[this.irisSize,this.irisSize]);return a&&(o=St.flipLeftRight(o)),{box:s,boxSize:i,crop:o}}getEyeCoords(e,t,n,r=!1){let a=[];for(let s=0;s<t2;s++){let i=e[s*3],o=e[s*3+1],l=e[s*3+2];a.push([(r?1-i/this.irisSize:i/this.irisSize)*n[0]+t.startPoint[0],o/this.irisSize*n[1]+t.startPoint[1],l])}return{rawCoords:a,iris:a.slice(Yre)}}getAdjustedIrisCoords(e,t,n){let r=e[da[`${n}EyeUpper0`][Zre]][2],a=e[da[`${n}EyeLower0`][Jre]][2],s=(r+a)/2;return t.map((i,o)=>{let l=s;return o===2?l=r:o===4&&(l=a),[i[0],i[1],l]})}async predict(e,t){let n=!1,r;if((this.skipped===0||this.skipped>t.face.detector.skipFrames||!t.face.mesh.enabled||!t.videoOptimized)&&(r=await this.boundingBoxDetector.getBoundingBoxes(e),this.skipped=0),t.videoOptimized&&this.skipped++,r&&r.boxes&&(!t.face.mesh.enabled||r.boxes.length!==this.detectedFaces&&this.detectedFaces!==t.face.detector.maxFaces)){this.storedBoxes=[],this.detectedFaces=0;for(let s of r.boxes)this.storedBoxes.push({startPoint:s.box.startPoint.dataSync(),endPoint:s.box.endPoint.dataSync(),landmarks:s.landmarks,confidence:s.confidence});this.storedBoxes.length>0&&(n=!0)}if(n){if(!r||!r.boxes||r.boxes.length===0)return this.storedBoxes=[],this.detectedFaces=0,null;for(let s=0;s<this.storedBoxes.length;s++){let i=Dre({startPoint:this.storedBoxes[s].startPoint,endPoint:this.storedBoxes[s].endPoint},r.scaleFactor),o=qg(i),l=Xg(o),c=this.storedBoxes[s].landmarks.arraySync(),u=this.storedBoxes[s].confidence;this.storedBoxes[s]={...l,confidence:u,landmarks:c}}this.runsWithoutFaceDetector=0}r&&r.boxes&&r.boxes.forEach(s=>{s.box.startPoint.dispose(),s.box.endPoint.dispose(),s.landmarks.dispose()});let a=U(()=>this.storedBoxes.map((s,i)=>{let o,l=0,c;if(t.face.detector.rotation){let[b,x]=s.landmarks.length>=Hre?Gre:Kre;l=zre(s.landmarks[b],s.landmarks[x]);let w=s1({startPoint:s.startPoint,endPoint:s.endPoint}),_=[w[0]/e.shape[2],w[1]/e.shape[1]],N=St.rotateWithOffset(e,l,0,_);c=g6(-l,w),o=m6({startPoint:s.startPoint,endPoint:s.endPoint},N,[this.meshHeight,this.meshWidth]).div(255)}else{c=Kg;let b=e.clone();o=m6({startPoint:s.startPoint,endPoint:s.endPoint},b,[this.meshHeight,this.meshWidth]).div(255)}if(!t.face.mesh.enabled)return{coords:null,box:s,faceConfidence:null,confidence:s.confidence,image:o};let[,u,h]=this.meshDetector.predict(o),d=u.dataSync()[0];if(d<t.face.detector.minConfidence)return null;let p=q(h,[-1,3]).arraySync();if(t.face.iris.enabled){let{box:b,boxSize:x,crop:w}=this.getEyeBox(p,o,Yg[0],Yg[1],!0),{box:_,boxSize:N,crop:T}=this.getEyeBox(p,o,e2[0],e2[1]),E=this.irisModel.predict(ct([w,T])).dataSync(),M=E.slice(0,t2*3),{rawCoords:z,iris:P}=this.getEyeCoords(M,b,x,!0),B=E.slice(t2*3),{rawCoords:G,iris:V}=this.getEyeCoords(B,_,N),K=this.getLeftToRightEyeDepthDifference(p);Math.abs(K)<30?(i1(p,z,"left"),i1(p,G,"right")):K<1?i1(p,z,"left",["EyeUpper0","EyeLower0"]):i1(p,G,"right",["EyeUpper0","EyeLower0"]);let X=this.getAdjustedIrisCoords(p,P,"left"),ee=this.getAdjustedIrisCoords(p,V,"right");p=p.concat(X).concat(ee)}let f=this.transformRawCoords(p,s,l,c),m=qg(this.calculateLandmarksBoundingBox(f)),A=Xg(m),y=pr(f),g={coords:y,box:m,faceConfidence:d,confidence:s.confidence,image:o,rawCoords:p};return t.face.mesh.returnRawData||delete g.rawCoords,this.storedBoxes[i]={...A,landmarks:y.arraySync(),confidence:s.confidence,faceConfidence:d},g}));return a=a.filter(s=>s!==null),this.detectedFaces=a.length,a}calculateLandmarksBoundingBox(e){let t=e.map(s=>s[0]),n=e.map(s=>s[1]),r=[Math.min(...t),Math.min(...n)],a=[Math.max(...t),Math.max(...n)];return{startPoint:r,endPoint:a,landmarks:e}}},w6=fh(G4()),_6={};Ir(_6,{FaceBoxes:()=>b6,load:()=>Qre});var v6={};function Lc(e,t){if(!t||!t.kernels)return;let n=5,r=t.kernels.filter(o=>o.kernelTimeMs>0).reduce((o,l)=>o+=l.kernelTimeMs,0),a=t.kernels.map((o,l)=>(o.id=l,o)).filter(o=>o.kernelTimeMs>0).sort((o,l)=>l.kernelTimeMs-o.kernelTimeMs),s=t.kernels.map((o,l)=>(o.id=l,o)).filter(o=>o.totalBytesSnapshot>0).sort((o,l)=>l.totalBytesSnapshot-o.totalBytesSnapshot);a.length>n&&(a.length=n),s.length>n&&(s.length=n);let i={newBytes:t.newBytes,newTensors:t.newTensors,peakBytes:t.peakBytes,numKernelOps:t.kernels.length,timeKernelOps:r,slowestKernelOps:a,largestKernelOps:s};v6[e]=i,Ue("Human profiler",e,i)}var b6=class{constructor(e,t){this.enlarge=1.1,this.model=e,this.config=t}async estimateFaces(e,t){t&&(this.config=t);let n=[],r=St.resizeBilinear(e,[this.config.face.detector.inputSize,this.config.face.detector.inputSize]),a=r.toInt(),s,i;if(t.profile){let o=await Bo(()=>this.model.executeAsync(a));s=o.result[0].dataSync(),i=o.result[1].squeeze().arraySync(),o.result.forEach(l=>l.dispose()),Lc("faceboxes",o)}else{let[o,l,c]=await this.model.executeAsync(a);s=o.dataSync();let u=l.squeeze();i=u.arraySync(),o.dispose(),l.dispose(),u.dispose(),c.dispose()}a.dispose(),r.dispose();for(let o in i)if(s[o]&&s[o]>this.config.face.detector.minConfidence){let l=[i[o][0]/this.enlarge,i[o][1]/this.enlarge,i[o][2]*this.enlarge,i[o][3]*this.enlarge],c=[l[1],l[0],l[3]-l[1],l[2]-l[0]],u=[parseInt((c[0]*e.shape[2]).toString()),parseInt((c[1]*e.shape[1]).toString()),parseInt((c[2]*e.shape[2]).toString()),parseInt((c[3]*e.shape[1]).toString())],h=St.cropAndResize(e,[l],[0],[this.config.face.detector.inputSize,this.config.face.detector.inputSize]),d=h.div([255]);h.dispose(),n.push({confidence:s[o],box:u,boxRaw:this.config.face.mesh.returnRawData?c:null,image:d})}return n}};async function Qre(e){let t=await Zn(e.face.detector.modelPath);Ue(`load model: ${e.face.detector.modelPath.match(/\/(.*)\./)[1]}`);let n=new b6(t,e);return e.face.mesh.enabled&&Ue(`load model: ${e.face.mesh.modelPath.match(/\/(.*)\./)[1]}`),e.face.iris.enabled&&Ue(`load model: ${e.face.iris.modelPath.match(/\/(.*)\./)[1]}`),n}var k6={};Ir(k6,{load:()=>n2,predict:()=>r2});var Ml,o1={age:0},l1=Number.MAX_SAFE_INTEGER;async function n2(e){return Ml||(Ml=await Zn(e.face.age.modelPath),Ue(`load model: ${e.face.age.modelPath.match(/\/(.*)\./)[1]}`)),Ml}async function r2(e,t){return Ml?l1<t.face.age.skipFrames&&t.videoOptimized&&o1.age&&o1.age>0?(l1++,o1):(t.videoOptimized?l1=0:l1=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=St.resizeBilinear(e,[t.face.age.inputSize,t.face.age.inputSize],!1),a=L(r,[255]);Fe(r);let s,i={age:0};if(!t.profile)t.face.age.enabled&&(s=await Ml.predict(a));else{let o=t.face.age.enabled?await Bo(()=>Ml.predict(a)):{};s=o.result.clone(),o.result.dispose(),Lc("age",o)}if(a.dispose(),s){let o=s.dataSync();i.age=Math.trunc(10*o[0])/10}s.dispose(),o1=i,n(i)})):null}var I6={};Ir(I6,{load:()=>a2,predict:()=>s2});var bi,i2={gender:""},u1=Number.MAX_SAFE_INTEGER,o2=!1,l2=[.2989,.587,.114];async function a2(e){return bi||(bi=await Zn(e.face.gender.modelPath),o2=bi.inputs[0].shape[3]===1,Ue(`load model: ${e.face.gender.modelPath.match(/\/(.*)\./)[1]}`)),bi}async function s2(e,t){return bi?u1<t.face.gender.skipFrames&&t.videoOptimized&&i2.gender!==""?(u1++,i2):(t.videoOptimized?u1=0:u1=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=St.resizeBilinear(e,[t.face.gender.inputSize,t.face.gender.inputSize],!1),a;o2?a=U(()=>{let[o,l,c]=an(r,3,3),u=L(o,l2[0]),h=L(l,l2[1]),d=L(c,l2[2]);return Yh([u,h,d]).sub(.5).mul(2)}):a=L(r,[255]),Fe(r);let s,i={gender:"",confidence:0};if(!t.profile)t.face.gender.enabled&&(s=await bi.predict(a));else{let o=t.face.gender.enabled?await Bo(()=>bi.predict(a)):{};s=o.result.clone(),o.result.dispose(),Lc("gender",o)}if(a.dispose(),s){let o=s.dataSync();if(o2){let l=Math.trunc(100*Math.abs(o[0]-o[1]))/100;l>t.face.gender.minConfidence&&(i.gender=o[0]>o[1]?"female":"male",i.confidence=l)}else{let l=Math.trunc(200*Math.abs(o[0]-.5))/100;l>t.face.gender.minConfidence&&(i.gender=o[0]<=.5?"female":"male",i.confidence=Math.min(.99,l))}}s.dispose(),i2=i,n(i)})):null}var N6={};Ir(N6,{load:()=>u2,predict:()=>c2});var eae=["angry","disgust","fear","happy","sad","surprise","neutral"],$l,h2=[],c1=Number.MAX_SAFE_INTEGER,d2=[.2989,.587,.114],S6=1;async function u2(e){return $l||($l=await Zn(e.face.emotion.modelPath),Ue(`load model: ${e.face.emotion.modelPath.match(/\/(.*)\./)[1]}`)),$l}async function c2(e,t){return $l?c1<t.face.emotion.skipFrames&&t.videoOptimized&&h2.length>0?(c1++,h2):(t.videoOptimized?c1=0:c1=Number.MAX_SAFE_INTEGER,new Promise(async n=>{let r=St.resizeBilinear(e,[t.face.emotion.inputSize,t.face.emotion.inputSize],!1),[a,s,i]=an(r,3,3);r.dispose();let o=L(a,d2[0]),l=L(s,d2[1]),c=L(i,d2[2]);a.dispose(),s.dispose(),i.dispose();let u=Yh([o,l,c]);o.dispose(),l.dispose(),c.dispose();let h=U(()=>u.sub(.5).mul(2));u.dispose();let d=[];if(t.face.emotion.enabled){let p;if(t.profile){let f=await Bo(()=>$l.predict(h));p=f.result.dataSync(),f.result.dispose(),Lc("emotion",f)}else{let f=await $l.predict(h);p=f.dataSync(),Fe(f)}for(let f=0;f<p.length;f++)S6*p[f]>t.face.emotion.minConfidence&&d.push({score:Math.min(.99,Math.trunc(100*S6*p[f])/100),emotion:eae[f]});d.sort((f,m)=>m.score-f.score)}h.dispose(),h2=d,n(d)})):null}var Dl;async function T6(e){return Dl||(Dl=await Zn(e.face.embedding.modelPath),Ue(`load model: ${e.face.embedding.modelPath.match(/\/(.*)\./)[1]}`)),Dl}function tae(e,t){if((e==null?void 0:e.length)!==(t==null?void 0:t.length))return 0;let n=2,r=10*e.map((a,s)=>a-t[s]).reduce((a,s)=>a+s**n,0)**(1/n);return Math.trunc(1e3*(1-r))/1e3}async function E6(e,t){return Dl?new Promise(async n=>{let r=St.resizeBilinear(e,[t.face.embedding.inputSize,t.face.embedding.inputSize],!1),a=[];if(t.face.embedding.enabled)if(t.profile){let s=await Bo(()=>Dl.predict({img_inputs:r}));a=[...s.result.dataSync()],s.result.dispose(),Lc("emotion",s)}else{let s=await Dl.predict({img_inputs:r});a=[...s.dataSync()],Fe(s)}r.dispose(),n(a)}):null}var C6={};Ir(C6,{PoseNet:()=>R6,load:()=>p2});var nae=[-123.15,-115.9,-103.06];function rae(e){let[t,n,r,a]=e;return{offsets:t,heatmap:n,displacementFwd:r,displacementBwd:a}}function aae(e){let[t,n,r,a]=e;return{offsets:r,heatmap:a,displacementFwd:t,displacementBwd:n}}var sae=class{constructor(e){this.model=e}predict(e,t){return U(()=>{let n=(t.body.modelType==="ResNet"?e.toFloat().add(nae):e.toFloat().div(127.5).sub(1)).expandDims(0),r=this.model.predict(n).map(s=>s.squeeze([0])),a=t.body.modelType==="ResNet"?aae(r):rae(r);return{heatmapScores:a.heatmap.sigmoid(),offsets:a.offsets,displacementFwd:a.displacementFwd,displacementBwd:a.displacementBwd}})}dispose(){this.model.dispose()}};function f2(e){return Math.floor(e/2)}var iae=class{constructor(e,t){this.priorityQueue=new Array(e),this.numberOfElements=-1,this.getElementValue=t}enqueue(e){this.priorityQueue[++this.numberOfElements]=e,this.swim(this.numberOfElements)}dequeue(){let e=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,e}empty(){return this.numberOfElements===-1}size(){return this.numberOfElements+1}all(){return this.priorityQueue.slice(0,this.numberOfElements+1)}max(){return this.priorityQueue[0]}swim(e){for(;e>0&&this.less(f2(e),e);)this.exchange(e,f2(e)),e=f2(e)}sink(e){for(;2*e<=this.numberOfElements;){let t=2*e;if(t<this.numberOfElements&&this.less(t,t+1)&&t++,!this.less(e,t))break;this.exchange(e,t),e=t}}getValueAt(e){return this.getElementValue(this.priorityQueue[e])}less(e,t){return this.getValueAt(e)<this.getValueAt(t)}exchange(e,t){let n=this.priorityQueue[e];this.priorityQueue[e]=this.priorityQueue[t],this.priorityQueue[t]=n}};function oae(e,t,n,r,a,s){let[i,o]=s.shape,l=!0,c=Math.max(n-a,0),u=Math.min(n+a+1,i);for(let h=c;h<u;++h){let d=Math.max(r-a,0),p=Math.min(r+a+1,o);for(let f=d;f<p;++f)if(s.get(h,f,e)>t){l=!1;break}if(!l)break}return l}function lae(e,t,n){let[r,a,s]=n.shape,i=new iae(r*a*s,({score:o})=>o);for(let o=0;o<r;++o)for(let l=0;l<a;++l)for(let c=0;c<s;++c){let u=n.get(o,l,c);u<e||oae(c,u,o,l,t,n)&&i.enqueue({score:u,part:{heatmapY:o,heatmapX:l,id:c}})}return i}var Ol=fh(Sf()),uae=fh(Sf());function F6(e,t,n,r){return{y:r.get(e,t,n),x:r.get(e,t,n+uae.NUM_KEYPOINTS)}}function M6(e,t,n){let{heatmapY:r,heatmapX:a,id:s}=e,{y:i,x:o}=F6(r,a,s,n);return{x:e.heatmapX*t+o,y:e.heatmapY*t+i}}function $6(e,t,n){return e<t?t:e>n?n:e}function cae(e,t,n,r){let a=n-e,s=r-t;return a*a+s*s}function D6(e,t){return{x:e.x+t.x,y:e.y+t.y}}var m2=fh(Sf());function hae(e,t){let n=t.shape[0],r=new Float32Array(n);for(let a=0;a<n;a++){let s=t.get(a,0),i=t.get(a,1);r[a]=e.get(s,i,a)}return r}function dae(e,t,n,r){return{y:r.get(e,t,n),x:r.get(e,t,n+m2.NUM_KEYPOINTS)}}function pae(e,t){let n=[];for(let r=0;r<m2.NUM_KEYPOINTS;r++){let a=e.get(r,0).valueOf(),s=e.get(r,1).valueOf(),{x:i,y:o}=dae(a,s,r,t);n.push(o),n.push(i)}return pr(n,[m2.NUM_KEYPOINTS,2])}function fae(e,t,n){return U(()=>e.toTensor().mul(Se(t,"int32")).toFloat().add(pae(e,n)))}function mae(e,t){return U(()=>{let n=e.div(Se(t,"int32"));return e.sub(n.mul(Se(t,"int32")))})}function Aae(e){let[t,n,r]=e.shape;return U(()=>{let a=e.reshape([t*n,r]).argMax(0),s=a.div(Se(n,"int32")).expandDims(1),i=mae(a,n).expandDims(1);return ct([s,i],1)})}var O6=Ol.poseChain.map(([e,t])=>[Ol.partIds[e],Ol.partIds[t]]),A2=O6.map(([,e])=>e),z6=O6.map(([e])=>e);function yae(e,t,n){let r=n.shape[2]/2;return{y:n.get(t.y,t.x,e),x:n.get(t.y,t.x,r+e)}}function y2(e,t,n,r){return{y:$6(Math.round(e.y/t),0,n-1),x:$6(Math.round(e.x/t),0,r-1)}}function P6(e,t,n,r,a,s,i,o=2){let[l,c]=r.shape,u=y2(t.position,s,l,c),h=yae(e,u,i),d=D6(t.position,h);for(let m=0;m<o;m++){let A=y2(d,s,l,c),y=F6(A.y,A.x,n,a);d=D6({x:A.x*s,y:A.y*s},{x:y.x,y:y.y})}let p=y2(d,s,l,c),f=r.get(p.y,p.x,n);return{position:d,part:Ol.partNames[n],score:f}}function gae(e,t,n,r,a,s){let i=t.shape[2],o=A2.length,l=new Array(i),{part:c,score:u}=e,h=M6(c,r,n);l[c.id]={score:u,part:Ol.partNames[c.id],position:h};for(let d=o-1;d>=0;--d){let p=A2[d],f=z6[d];l[p]&&!l[f]&&(l[f]=P6(d,l[p],f,t,n,r,s))}for(let d=0;d<o;++d){let p=z6[d],f=A2[d];l[p]&&!l[f]&&(l[f]=P6(d,l[p],f,t,n,r,a))}return l}async function xae(e,t,n){let r=0,a=Aae(e),s=await Promise.all([e.buffer(),t.buffer(),a.buffer()]),i=s[0],o=s[1],l=s[2],c=fae(l,n.body.outputStride,o),u=await c.buffer(),h=Array.from(hae(i,l)).map((p,f)=>(r+=p,{position:{y:u.get(f,0),x:u.get(f,1)},part:Ol.partNames[f],score:p})),d=h.filter(p=>p.score>n.body.scoreThreshold);return a.dispose(),c.dispose(),{keypoints:d,score:r/h.length}}var wae=1;function L6(e,t,{x:n,y:r},a){return e.some(({keypoints:s})=>{let i=s[a].position;return cae(r,n,i.y,i.x)<=t})}function _ae(e,t,n){return n.reduce((r,{position:a,score:s},i)=>(L6(e,t,a,i)||(r+=s),r),0)/n.length}function bae(e,t,n,r,a){let s=[],i=lae(a.body.scoreThreshold,wae,e),o=a.body.nmsRadius^2;for(;s.length<a.body.maxDetections&&!i.empty();){let l=i.dequeue(),c=M6(l.part,a.body.outputStride,t);if(L6(s,o,c,l.part.id))continue;let u=gae(l,e,t,a.body.outputStride,n,r),h=_ae(s,o,u);h>a.body.scoreThreshold&&s.push({keypoints:u,score:h})}return s}async function vae(e){return Promise.all(e.map(t=>t.buffer()))}function kae(e,t,n){return{score:e.score,keypoints:e.keypoints.map(({score:r,part:a,position:s})=>({score:r,part:a,position:{x:s.x*n,y:s.y*t}}))}}function Iae(e,[t,n]){let r=e.squeeze(0),a=r.resizeBilinear([t,n]);return r.dispose(),a}function W6(e,[t,n],[r,a]){return e.map(s=>kae(s,t/r,n/a))}async function Nae(e,t,n){return new Promise(async r=>{let a=e.shape[1],s=e.shape[2],i=await vae([t.heatmapScores,t.offsets,t.displacementFwd,t.displacementBwd]),o=i[0],l=i[1],c=i[2],u=i[3],h=await bae(o,l,c,u,n),d=W6(h,[a,s],[n.body.inputSize,n.body.inputSize]);r(d)})}async function Sae(e,t,n){return new Promise(async r=>{let a=e.shape[1],s=e.shape[2],i=[await xae(t.heatmapScores,t.offsets,n)],o=W6(i,[a,s],[n.body.inputSize,n.body.inputSize]);r(o)})}var R6=class{constructor(e){this.baseModel=e}async estimatePoses(e,t){let n=Iae(e,[t.body.inputSize,t.body.inputSize]),r=this.baseModel.predict(n,t),a=t.body.maxDetections<2?await Sae(e,r,t):await Nae(e,r,t);return r.heatmapScores.dispose(),r.offsets.dispose(),r.displacementFwd.dispose(),r.displacementBwd.dispose(),n.dispose(),a}dispose(){this.baseModel.dispose()}};async function p2(e){let t=await Zn(e.body.modelPath),n=new sae(t);return Ue(`load model: ${e.body.modelPath.match(/\/(.*)\./)[1]}`),new R6(n)}var B6={};Ir(B6,{HandPose:()=>V6,load:()=>g2});function x2(e){return[Math.abs(e.endPoint[0]-e.startPoint[0]),Math.abs(e.endPoint[1]-e.startPoint[1])]}function h1(e){return[e.startPoint[0]+(e.endPoint[0]-e.startPoint[0])/2,e.startPoint[1]+(e.endPoint[1]-e.startPoint[1])/2]}function Tae(e,t,n){let r=t.shape[1],a=t.shape[2],s=[[e.startPoint[1]/r,e.startPoint[0]/a,e.endPoint[1]/r,e.endPoint[0]/a]];return St.cropAndResize(t,s,[0],n)}function Eae(e,t){let n=[e.startPoint[0]*t[0],e.startPoint[1]*t[1]],r=[e.endPoint[0]*t[0],e.endPoint[1]*t[1]],a=e.palmLandmarks.map(s=>[s[0]*t[0],s[1]*t[1]]);return{startPoint:n,endPoint:r,palmLandmarks:a,confidence:e.confidence}}function w2(e,t=1.5){let n=h1(e),r=x2(e),a=[t*r[0]/2,t*r[1]/2],s=[n[0]-a[0],n[1]-a[1]],i=[n[0]+a[0],n[1]+a[1]];return{startPoint:s,endPoint:i,palmLandmarks:e.palmLandmarks}}function _2(e){let t=h1(e),n=x2(e),r=Math.max(...n)/2,a=[t[0]-r,t[1]-r],s=[t[0]+r,t[1]+r];return{startPoint:a,endPoint:s,palmLandmarks:e.palmLandmarks}}var Cae=class{constructor(e,t,n){this.model=e,this.anchors=n.map(r=>[r.x_center,r.y_center]),this.anchorsTensor=pr(this.anchors),this.inputSizeTensor=Qt([t,t]),this.doubleInputSizeTensor=Qt([t*2,t*2])}normalizeBoxes(e){return U(()=>{let t=Me(e,[0,0],[-1,2]),n=Me(e,[0,2],[-1,2]),r=oe(Ne(t,this.inputSizeTensor),this.anchorsTensor),a=Ne(n,this.doubleInputSizeTensor),s=L(we(r,a),this.inputSizeTensor),i=L(oe(r,a),this.inputSizeTensor);return ed([s,i],1)})}normalizeLandmarks(e,t){return U(()=>{let n=oe(Ne(e.reshape([-1,7,2]),this.inputSizeTensor),this.anchors[t]);return L(n,this.inputSizeTensor)})}async getBoxes(e,t){let n=this.model.predict(e),r=n.squeeze();n.dispose();let a=U(()=>Yn(Me(r,[0,0],[-1,1])).squeeze()),s=a.dataSync(),i=Me(r,[0,1],[-1,4]),o=this.normalizeBoxes(i);i.dispose();let l=await St.nonMaxSuppressionAsync(o,s,t.hand.maxHands,t.hand.iouThreshold,t.hand.scoreThreshold),c=l.arraySync();a.dispose(),l.dispose();let u=[];for(let h of c)if(s[h]>=t.hand.minConfidence){let d=Me(o,[h,0],[1,-1]),p=Me(r,[h,5],[1,14]),f=U(()=>this.normalizeLandmarks(p,h).reshape([-1,2]));p.dispose(),u.push({box:d,palmLandmarks:f,confidence:s[h]})}return r.dispose(),o.dispose(),u}async estimateHandBounds(e,t){let n=e.shape[1],r=e.shape[2],a=U(()=>e.resizeBilinear([t.hand.inputSize,t.hand.inputSize]).div(127.5).sub(1)),s=await this.getBoxes(a,t);a.dispose();let i=[];if(!s||s.length===0)return i;for(let o of s){let l=o.box.dataSync(),c=l.slice(0,2),u=l.slice(2,4),h=o.palmLandmarks.arraySync();o.box.dispose(),o.palmLandmarks.dispose(),i.push(Eae({startPoint:c,endPoint:u,palmLandmarks:h,confidence:o.confidence},[r/t.hand.inputSize,n/t.hand.inputSize]))}return i}};function Rae(e){return e-2*Math.PI*Math.floor((e+Math.PI)/(2*Math.PI))}function Fae(e,t){let n=Math.PI/2-Math.atan2(-(t[1]-e[1]),t[0]-e[0]);return Rae(n)}var U6=(e,t)=>[[1,0,e],[0,1,t],[0,0,1]];function vi(e,t){let n=0;for(let r=0;r<e.length;r++)n+=e[r]*t[r];return n}function Mae(e,t){let n=[];for(let r=0;r<e.length;r++)n.push(e[r][t]);return n}function H6(e,t){let n=[],r=e.length;for(let a=0;a<r;a++){n.push([]);for(let s=0;s<r;s++)n[a].push(vi(e[a],Mae(t,s)))}return n}function j6(e,t){let n=Math.cos(e),r=Math.sin(e),a=[[n,-r,0],[r,n,0],[0,0,1]],s=U6(t[0],t[1]),i=H6(s,a),o=U6(-t[0],-t[1]);return H6(i,o)}function $ae(e){let t=[[e[0][0],e[1][0]],[e[0][1],e[1][1]]],n=[e[0][2],e[1][2]],r=[-vi(t[0],n),-vi(t[1],n)];return[t[0].concat(r[0]),t[1].concat(r[1]),[0,0,1]]}function G6(e,t){return[vi(e,t[0]),vi(e,t[1])]}var Dae=5,q6=1.65,X6=[0,5,9,13,17,1,2],Oae=0,zae=2,Pae=class{constructor(e,t,n){this.handDetector=e,this.landmarkDetector=t,this.inputSize=n,this.storedBoxes=[],this.skipped=0,this.detectedHands=0}getBoxForPalmLandmarks(e,t){let n=e.map(a=>G6([...a,1],t)),r=this.calculateLandmarksBoundingBox(n);return w2(_2(r),Dae)}getBoxForHandLandmarks(e){let t=this.calculateLandmarksBoundingBox(e),n=w2(_2(t),q6);n.palmLandmarks=[];for(let r=0;r<X6.length;r++)n.palmLandmarks.push(e[X6[r]].slice(0,2));return n}transformRawCoords(e,t,n,r){let a=x2(t),s=[a[0]/this.inputSize,a[1]/this.inputSize,(a[0]+a[1])/this.inputSize/2],i=e.map(d=>[s[0]*(d[0]-this.inputSize/2),s[1]*(d[1]-this.inputSize/2),s[2]*d[2]]),o=j6(n,[0,0]),l=i.map(d=>[...G6(d,o),d[2]]),c=$ae(r),u=[...h1(t),1],h=[vi(u,c[0]),vi(u,c[1])];return l.map(d=>[d[0]+h[0],d[1]+h[1],d[2]])}async estimateHands(e,t){let n=!1,r;(this.skipped===0||this.skipped>t.hand.skipFrames||!t.hand.landmarks||!t.videoOptimized)&&(r=await this.handDetector.estimateHandBounds(e,t),this.skipped=0),t.videoOptimized&&this.skipped++,r&&r.length>0&&(r.length!==this.detectedHands&&this.detectedHands!==t.hand.maxHands||!t.hand.landmarks)&&(this.detectedHands=0,this.storedBoxes=[...r],this.storedBoxes.length>0&&(n=!0));let a=[];for(let s=0;s<this.storedBoxes.length;s++){let i=this.storedBoxes[s];if(i)if(t.hand.landmarks){let o=t.hand.rotation?Fae(i.palmLandmarks[Oae],i.palmLandmarks[zae]):0,l=h1(i),c=[l[0]/e.shape[2],l[1]/e.shape[1]],u=t.hand.rotation?St.rotateWithOffset(e,o,0,c):e.clone(),h=j6(-o,l),d=n?this.getBoxForPalmLandmarks(i.palmLandmarks,h):i,p=Tae(d,u,[this.inputSize,this.inputSize]),f=p.div(255);p.dispose(),u.dispose();let[m,A]=await this.landmarkDetector.predict(f);f.dispose();let y=m.dataSync()[0];if(m.dispose(),y>=t.hand.minConfidence){let g=q(A,[-1,3]),b=g.arraySync();A.dispose(),g.dispose();let x=this.transformRawCoords(b,d,o,h),w=this.getBoxForHandLandmarks(x);this.storedBoxes[s]=w;let _={landmarks:x,confidence:y,box:{topLeft:w.startPoint,bottomRight:w.endPoint}};a.push(_)}else this.storedBoxes[s]=null;A.dispose()}else{let o=w2(_2(i),q6),l={confidence:i.confidence,box:{topLeft:o.startPoint,bottomRight:o.endPoint}};a.push(l)}}return this.storedBoxes=this.storedBoxes.filter(s=>s!==null),this.detectedHands=a.length,a}calculateLandmarksBoundingBox(e){let t=e.map(s=>s[0]),n=e.map(s=>s[1]),r=[Math.min(...t),Math.min(...n)],a=[Math.max(...t),Math.max(...n)];return{startPoint:r,endPoint:a}}},Lae=[{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.046875,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.078125,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.109375,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.140625,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.171875,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.203125,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.234375,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.265625,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.296875,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.328125,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.359375,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.390625,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.421875,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.453125,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.484375,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.515625,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.546875,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.578125,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.609375,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.640625,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.671875,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.703125,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.734375,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.765625,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.796875,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.828125,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.859375,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.890625,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.921875,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.953125,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.984375,y_center:.015625},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.046875,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.078125,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.109375,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.140625,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.171875,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.203125,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.234375,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.265625,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.296875,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.328125,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.359375,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.390625,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.421875,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.453125,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.484375,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.515625,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.546875,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.578125,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.609375,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.640625,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.671875,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.703125,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.734375,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.765625,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.796875,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.828125,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.859375,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.890625,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.921875,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.953125,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.984375,y_center:.046875},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.046875,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.078125,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.109375,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.140625,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.171875,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.203125,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.234375,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.265625,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.296875,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.328125,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.359375,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.390625,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.421875,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.453125,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.484375,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.515625,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.546875,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.578125,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.609375,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.640625,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.671875,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.703125,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.734375,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.765625,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.796875,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.828125,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.859375,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.890625,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.921875,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.953125,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.984375,y_center:.078125},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.046875,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.078125,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.109375,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.140625,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.171875,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.203125,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.234375,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.265625,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.296875,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.328125,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.359375,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.390625,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.421875,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.453125,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.484375,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.515625,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.546875,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.578125,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.609375,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.640625,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.671875,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.703125,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.734375,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.765625,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.796875,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.828125,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.859375,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.890625,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.921875,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.953125,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.984375,y_center:.109375},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.046875,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.078125,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.109375,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.140625,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.171875,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.203125,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.234375,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.265625,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.296875,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.328125,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.359375,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.390625,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.421875,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.453125,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.484375,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.515625,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.546875,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.578125,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.609375,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.640625,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.671875,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.703125,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.734375,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.765625,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.796875,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.828125,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.859375,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.890625,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.921875,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.953125,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.984375,y_center:.140625},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.046875,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.078125,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.109375,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.140625,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.171875,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.203125,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.234375,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.265625,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.296875,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.328125,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.359375,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.390625,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.421875,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.453125,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.484375,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.515625,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.546875,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.578125,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.609375,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.640625,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.671875,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.703125,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.734375,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.765625,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.796875,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.828125,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.859375,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.890625,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.921875,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.953125,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.984375,y_center:.171875},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.046875,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.078125,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.109375,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.140625,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.171875,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.203125,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.234375,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.265625,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.296875,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.328125,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.359375,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.390625,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.421875,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.453125,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.484375,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.515625,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.546875,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.578125,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.609375,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.640625,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.671875,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.703125,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.734375,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.765625,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.796875,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.828125,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.859375,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.890625,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.921875,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.953125,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.984375,y_center:.203125},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.046875,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.078125,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.109375,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.140625,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.171875,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.203125,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.234375,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.265625,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.296875,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.328125,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.359375,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.390625,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.421875,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.453125,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.484375,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.515625,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.546875,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.578125,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.609375,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.640625,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.671875,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.703125,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.734375,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.765625,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.796875,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.828125,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.859375,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.890625,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.921875,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.953125,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.984375,y_center:.234375},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.046875,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.078125,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.109375,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.140625,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.171875,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.203125,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.234375,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.265625,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.296875,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.328125,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.359375,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.390625,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.421875,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.453125,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.484375,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.515625,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.546875,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.578125,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.609375,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.640625,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.671875,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.703125,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.734375,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.765625,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.796875,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.828125,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.859375,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.890625,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.921875,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.953125,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.984375,y_center:.265625},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.046875,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.078125,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.109375,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.140625,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.171875,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.203125,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.234375,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.265625,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.296875,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.328125,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.359375,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.390625,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.421875,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.453125,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.484375,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.515625,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.546875,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.578125,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.609375,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.640625,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.671875,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.703125,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.734375,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.765625,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.796875,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.828125,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.859375,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.890625,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.921875,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.953125,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.984375,y_center:.296875},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.046875,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.078125,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.109375,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.140625,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.171875,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.203125,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.234375,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.265625,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.296875,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.328125,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.359375,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.390625,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.421875,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.453125,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.484375,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.515625,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.546875,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.578125,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.609375,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.640625,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.671875,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.703125,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.734375,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.765625,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.796875,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.828125,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.859375,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.890625,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.921875,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.953125,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.984375,y_center:.328125},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.046875,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.078125,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.109375,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.140625,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.171875,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.203125,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.234375,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.265625,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.296875,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.328125,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.359375,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.390625,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.421875,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.453125,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.484375,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.515625,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.546875,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.578125,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.609375,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.640625,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.671875,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.703125,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.734375,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.765625,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.796875,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.828125,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.859375,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.890625,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.921875,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.953125,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.984375,y_center:.359375},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.046875,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.078125,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.109375,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.140625,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.171875,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.203125,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.234375,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.265625,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.296875,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.328125,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.359375,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.390625,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.421875,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.453125,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.484375,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.515625,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.546875,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.578125,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.609375,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.640625,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.671875,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.703125,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.734375,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.765625,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.796875,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.828125,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.859375,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.890625,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.921875,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.953125,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.984375,y_center:.390625},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.046875,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.078125,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.109375,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.140625,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.171875,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.203125,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.234375,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.265625,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.296875,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.328125,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.359375,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.390625,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.421875,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.453125,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.484375,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.515625,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.546875,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.578125,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.609375,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.640625,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.671875,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.703125,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.734375,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.765625,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.796875,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.828125,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.859375,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.890625,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.921875,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.953125,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.984375,y_center:.421875},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.046875,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.078125,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.109375,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.140625,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.171875,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.203125,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.234375,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.265625,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.296875,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.328125,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.359375,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.390625,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.421875,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.453125,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.484375,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.515625,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.546875,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.578125,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.609375,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.640625,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.671875,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.703125,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.734375,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.765625,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.796875,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.828125,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.859375,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.890625,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.921875,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.953125,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.984375,y_center:.453125},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.046875,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.078125,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.109375,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.140625,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.171875,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.203125,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.234375,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.265625,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.296875,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.328125,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.359375,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.390625,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.421875,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.453125,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.484375,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.515625,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.546875,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.578125,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.609375,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.640625,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.671875,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.703125,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.734375,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.765625,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.796875,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.828125,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.859375,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.890625,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.921875,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.953125,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.984375,y_center:.484375},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.046875,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.078125,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.109375,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.140625,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.171875,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.203125,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.234375,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.265625,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.296875,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.328125,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.359375,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.390625,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.421875,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.453125,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.484375,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.515625,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.546875,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.578125,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.609375,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.640625,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.671875,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.703125,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.734375,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.765625,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.796875,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.828125,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.859375,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.890625,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.921875,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.953125,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.984375,y_center:.515625},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.046875,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.078125,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.109375,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.140625,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.171875,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.203125,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.234375,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.265625,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.296875,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.328125,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.359375,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.390625,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.421875,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.453125,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.484375,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.515625,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.546875,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.578125,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.609375,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.640625,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.671875,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.703125,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.734375,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.765625,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.796875,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.828125,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.859375,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.890625,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.921875,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.953125,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.984375,y_center:.546875},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.046875,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.078125,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.109375,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.140625,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.171875,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.203125,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.234375,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.265625,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.296875,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.328125,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.359375,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.390625,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.421875,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.453125,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.484375,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.515625,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.546875,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.578125,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.609375,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.640625,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.671875,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.703125,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.734375,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.765625,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.796875,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.828125,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.859375,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.890625,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.921875,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.953125,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.984375,y_center:.578125},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.046875,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.078125,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.109375,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.140625,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.171875,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.203125,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.234375,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.265625,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.296875,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.328125,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.359375,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.390625,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.421875,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.453125,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.484375,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.515625,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.546875,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.578125,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.609375,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.640625,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.671875,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.703125,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.734375,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.765625,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.796875,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.828125,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.859375,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.890625,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.921875,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.953125,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.984375,y_center:.609375},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.046875,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.078125,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.109375,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.140625,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.171875,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.203125,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.234375,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.265625,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.296875,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.328125,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.359375,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.390625,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.421875,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.453125,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.484375,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.515625,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.546875,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.578125,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.609375,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.640625,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.671875,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.703125,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.734375,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.765625,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.796875,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.828125,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.859375,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.890625,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.921875,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.953125,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.984375,y_center:.640625},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.046875,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.078125,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.109375,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.140625,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.171875,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.203125,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.234375,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.265625,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.296875,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.328125,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.359375,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.390625,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.421875,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.453125,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.484375,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.515625,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.546875,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.578125,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.609375,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.640625,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.671875,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.703125,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.734375,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.765625,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.796875,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.828125,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.859375,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.890625,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.921875,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.953125,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.984375,y_center:.671875},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.046875,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.078125,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.109375,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.140625,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.171875,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.203125,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.234375,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.265625,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.296875,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.328125,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.359375,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.390625,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.421875,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.453125,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.484375,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.515625,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.546875,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.578125,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.609375,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.640625,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.671875,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.703125,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.734375,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.765625,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.796875,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.828125,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.859375,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.890625,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.921875,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.953125,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.984375,y_center:.703125},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.046875,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.078125,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.109375,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.140625,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.171875,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.203125,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.234375,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.265625,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.296875,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.328125,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.359375,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.390625,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.421875,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.453125,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.484375,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.515625,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.546875,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.578125,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.609375,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.640625,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.671875,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.703125,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.734375,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.765625,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.796875,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.828125,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.859375,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.890625,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.921875,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.953125,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.984375,y_center:.734375},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.046875,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.078125,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.109375,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.140625,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.171875,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.203125,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.234375,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.265625,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.296875,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.328125,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.359375,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.390625,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.421875,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.453125,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.484375,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.515625,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.546875,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.578125,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.609375,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.640625,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.671875,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.703125,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.734375,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.765625,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.796875,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.828125,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.859375,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.890625,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.921875,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.953125,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.984375,y_center:.765625},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.046875,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.078125,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.109375,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.140625,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.171875,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.203125,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.234375,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.265625,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.296875,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.328125,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.359375,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.390625,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.421875,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.453125,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.484375,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.515625,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.546875,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.578125,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.609375,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.640625,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.671875,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.703125,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.734375,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.765625,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.796875,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.828125,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.859375,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.890625,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.921875,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.953125,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.984375,y_center:.796875},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.046875,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.078125,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.109375,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.140625,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.171875,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.203125,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.234375,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.265625,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.296875,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.328125,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.359375,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.390625,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.421875,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.453125,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.484375,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.515625,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.546875,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.578125,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.609375,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.640625,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.671875,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.703125,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.734375,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.765625,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.796875,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.828125,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.859375,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.890625,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.921875,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.953125,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.984375,y_center:.828125},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.046875,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.078125,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.109375,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.140625,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.171875,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.203125,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.234375,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.265625,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.296875,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.328125,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.359375,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.390625,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.421875,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.453125,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.484375,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.515625,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.546875,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.578125,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.609375,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.640625,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.671875,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.703125,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.734375,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.765625,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.796875,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.828125,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.859375,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.890625,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.921875,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.953125,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.984375,y_center:.859375},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.046875,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.078125,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.109375,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.140625,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.171875,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.203125,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.234375,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.265625,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.296875,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.328125,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.359375,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.390625,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.421875,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.453125,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.484375,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.515625,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.546875,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.578125,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.609375,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.640625,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.671875,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.703125,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.734375,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.765625,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.796875,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.828125,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.859375,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.890625,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.921875,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.953125,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.984375,y_center:.890625},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.046875,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.078125,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.109375,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.140625,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.171875,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.203125,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.234375,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.265625,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.296875,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.328125,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.359375,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.390625,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.421875,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.453125,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.484375,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.515625,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.546875,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.578125,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.609375,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.640625,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.671875,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.703125,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.734375,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.765625,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.796875,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.828125,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.859375,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.890625,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.921875,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.953125,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.984375,y_center:.921875},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.046875,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.078125,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.109375,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.140625,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.171875,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.203125,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.234375,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.265625,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.296875,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.328125,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.359375,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.390625,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.421875,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.453125,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.484375,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.515625,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.546875,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.578125,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.609375,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.640625,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.671875,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.703125,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.734375,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.765625,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.796875,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.828125,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.859375,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.890625,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.921875,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.953125,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.984375,y_center:.953125},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.015625,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.046875,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.078125,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.109375,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.140625,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.171875,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.203125,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.234375,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.265625,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.296875,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.328125,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.359375,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.390625,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.421875,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.453125,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.484375,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.515625,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.546875,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.578125,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.609375,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.640625,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.671875,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.703125,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.734375,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.765625,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.796875,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.828125,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.859375,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.890625,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.921875,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.953125,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.984375,y_center:.984375},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.09375,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.15625,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.21875,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.28125,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.34375,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.40625,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.46875,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.53125,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.59375,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.65625,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.71875,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.78125,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.84375,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.90625,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.96875,y_center:.03125},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.09375,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.15625,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.21875,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.28125,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.34375,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.40625,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.46875,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.53125,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.59375,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.65625,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.71875,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.78125,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.84375,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.90625,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.96875,y_center:.09375},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.09375,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.15625,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.21875,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.28125,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.34375,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.40625,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.46875,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.53125,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.59375,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.65625,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.71875,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.78125,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.84375,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.90625,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.96875,y_center:.15625},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.09375,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.15625,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.21875,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.28125,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.34375,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.40625,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.46875,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.53125,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.59375,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.65625,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.71875,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.78125,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.84375,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.90625,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.96875,y_center:.21875},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.09375,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.15625,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.21875,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.28125,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.34375,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.40625,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.46875,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.53125,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.59375,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.65625,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.71875,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.78125,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.84375,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.90625,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.96875,y_center:.28125},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.09375,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.15625,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.21875,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.28125,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.34375,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.40625,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.46875,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.53125,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.59375,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.65625,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.71875,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.78125,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.84375,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.90625,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.96875,y_center:.34375},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.09375,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.15625,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.21875,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.28125,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.34375,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.40625,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.46875,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.53125,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.59375,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.65625,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.71875,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.78125,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.84375,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.90625,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.96875,y_center:.40625},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.09375,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.15625,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.21875,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.28125,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.34375,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.40625,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.46875,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.53125,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.59375,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.65625,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.71875,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.78125,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.84375,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.90625,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.96875,y_center:.46875},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.09375,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.15625,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.21875,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.28125,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.34375,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.40625,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.46875,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.53125,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.59375,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.65625,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.71875,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.78125,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.84375,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.90625,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.96875,y_center:.53125},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.09375,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.15625,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.21875,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.28125,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.34375,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.40625,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.46875,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.53125,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.59375,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.65625,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.71875,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.78125,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.84375,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.90625,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.96875,y_center:.59375},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.09375,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.15625,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.21875,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.28125,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.34375,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.40625,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.46875,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.53125,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.59375,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.65625,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.71875,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.78125,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.84375,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.90625,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.96875,y_center:.65625},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.09375,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.15625,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.21875,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.28125,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.34375,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.40625,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.46875,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.53125,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.59375,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.65625,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.71875,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.78125,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.84375,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.90625,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.96875,y_center:.71875},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.09375,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.15625,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.21875,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.28125,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.34375,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.40625,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.46875,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.53125,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.59375,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.65625,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.71875,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.78125,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.84375,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.90625,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.96875,y_center:.78125},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.09375,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.15625,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.21875,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.28125,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.34375,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.40625,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.46875,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.53125,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.59375,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.65625,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.71875,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.78125,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.84375,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.90625,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.96875,y_center:.84375},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.09375,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.15625,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.21875,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.28125,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.34375,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.40625,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.46875,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.53125,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.59375,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.65625,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.71875,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.78125,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.84375,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.90625,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.96875,y_center:.90625},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.03125,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.09375,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.15625,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.21875,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.28125,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.34375,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.40625,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.46875,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.53125,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.59375,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.65625,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.71875,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.78125,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.84375,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.90625,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.96875,y_center:.96875},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.1875,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.3125,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.4375,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.5625,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.6875,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.8125,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.9375,y_center:.0625},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.1875,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.3125,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.4375,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.5625,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.6875,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.8125,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.9375,y_center:.1875},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.1875,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.3125,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.4375,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.5625,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.6875,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.8125,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.9375,y_center:.3125},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.1875,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.3125,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.4375,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.5625,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.6875,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.8125,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.9375,y_center:.4375},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.1875,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.3125,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.4375,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.5625,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.6875,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.8125,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.9375,y_center:.5625},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.1875,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.3125,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.4375,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.5625,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.6875,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.8125,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.9375,y_center:.6875},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.1875,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.3125,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.4375,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.5625,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.6875,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.8125,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.9375,y_center:.8125},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.0625,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.1875,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.3125,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.4375,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.5625,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.6875,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.8125,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375},{w:1,h:1,x_center:.9375,y_center:.9375}],b2={thumb:[1,2,3,4],indexFinger:[5,6,7,8],middleFinger:[9,10,11,12],ringFinger:[13,14,15,16],pinky:[17,18,19,20],palmBase:[0]},V6=class{constructor(e){this.handPipeline=e}static getAnnotations(){return b2}async estimateHands(e,t){let n=await this.handPipeline.estimateHands(e,t);if(!n)return[];let r=[];for(let a of n){let s={};if(a.landmarks)for(let o of Object.keys(b2))s[o]=b2[o].map(l=>a.landmarks[l]);let i=a.box?[Math.max(0,a.box.topLeft[0]),Math.max(0,a.box.topLeft[1]),Math.min(e.shape[2],a.box.bottomRight[0])-a.box.topLeft[0],Math.min(e.shape[1],a.box.bottomRight[1])-a.box.topLeft[1]]:0;r.push({confidence:a.confidence,box:i,landmarks:a.landmarks,annotations:s})}return r}};async function g2(e){let[t,n]=await Promise.all([e.hand.enabled?Zn(e.hand.detector.modelPath,{fromTFHub:e.hand.detector.modelPath.includes("tfhub.dev")}):null,e.hand.landmarks?Zn(e.hand.skeleton.modelPath,{fromTFHub:e.hand.skeleton.modelPath.includes("tfhub.dev")}):null]),r=new Cae(t,e.hand.inputSize,Lae),a=new Pae(r,n,e.hand.inputSize),s=new V6(a);return e.hand.enabled&&Ue(`load model: ${e.hand.detector.modelPath.match(/\/(.*)\./)[1]}`),e.hand.landmarks&&Ue(`load model: ${e.hand.skeleton.modelPath.match(/\/(.*)\./)[1]}`),s}var Wae=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){let r=e[n].keypoints.find(l=>l.part==="leftWrist"),a=e[n].keypoints.find(l=>l.part==="rightWrist"),s=e[n].keypoints.find(l=>l.part==="nose");s&&r&&a&&r.position.y<s.position.y&&a.position.y<s.position.y?t.push({body:n,gesture:"i give up"}):s&&r&&r.position.y<s.position.y?t.push({body:n,gesture:"raise left hand"}):s&&a&&a.position.y<s.position.y&&t.push({body:n,gesture:"raise right hand"});let i=e[n].keypoints.find(l=>l.part==="leftShoulder"),o=e[n].keypoints.find(l=>l.part==="rightShoulder");i&&o&&t.push({body:n,gesture:`leaning ${i.position.y>o.position.y?"left":"right"}`})}return t},Bae=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++)if(e[n].mesh&&e[n].mesh.length>0){let r=e[n].mesh[35][2]-e[n].mesh[263][2];Math.abs(r)<10?t.push({face:n,gesture:"facing camera"}):t.push({face:n,gesture:`facing ${r<0?"right":"left"}`}),Math.abs(e[n].mesh[374][1]-e[n].mesh[386][1])/Math.abs(e[n].mesh[443][1]-e[n].mesh[450][1])<.2&&t.push({face:n,gesture:"blink left eye"}),Math.abs(e[n].mesh[145][1]-e[n].mesh[159][1])/Math.abs(e[n].mesh[223][1]-e[n].mesh[230][1])<.2&&t.push({face:n,gesture:"blink right eye"});let a=Math.min(100,500*Math.abs(e[n].mesh[13][1]-e[n].mesh[14][1])/Math.abs(e[n].mesh[10][1]-e[n].mesh[152][1]));a>10&&t.push({face:n,gesture:`mouth ${Math.trunc(a)}% open`});let s=e[n].mesh[152][2];Math.abs(s)>10&&t.push({face:n,gesture:`head ${s<0?"up":"down"}`})}return t},Vae=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){if(!e[n].annotations||!e[n].annotations.leftEyeIris||!e[n].annotations.rightEyeIris)continue;let r=e[n].annotations.leftEyeIris[3][0]-e[n].annotations.leftEyeIris[1][0],a=e[n].annotations.leftEyeIris[4][1]-e[n].annotations.leftEyeIris[2][1],s=Math.abs(r*a),i=e[n].annotations.rightEyeIris[3][0]-e[n].annotations.rightEyeIris[1][0],o=e[n].annotations.rightEyeIris[4][1]-e[n].annotations.rightEyeIris[2][1],l=Math.abs(i*o);Math.abs(s-l)/Math.max(s,l)<.25&&t.push({iris:n,gesture:"looking at camera"})}return t},Uae=e=>{if(!e)return[];let t=[];for(let n=0;n<e.length;n++){let r=[];for(let[a,s]of Object.entries(e[n].annotations))a!=="palmBase"&&r.push({name:a.toLowerCase(),position:s[0]});if(r&&r.length>0){let a=r.reduce((i,o)=>i.position[2]<o.position[2]?i:o),s=r.reduce((i,o)=>i.position[1]<o.position[1]?i:o);t.push({hand:n,gesture:`${a.name} forward ${s.name} up`})}}return t};function Hae(e,t,n){let r=function(o,l,c){let u=new RegExp("\\b"+l+" \\w+ (\\w+)","ig");o.replace(u,(h,d)=>(c[d]=0,h))},a=function(o,l){let c=e.createShader(l);if(e.shaderSource(c,o),e.compileShader(c),!e.getShaderParameter(c,e.COMPILE_STATUS))throw new Error("Filter: GL compile failed",e.getShaderInfoLog(c));return c};this.uniform={},this.attribute={};let s=a(t,e.VERTEX_SHADER),i=a(n,e.FRAGMENT_SHADER);if(this.id=e.createProgram(),e.attachShader(this.id,s),e.attachShader(this.id,i),e.linkProgram(this.id),!e.getProgramParameter(this.id,e.LINK_STATUS))throw new Error("Filter: GL link failed",e.getProgramInfoLog(this.id));e.useProgram(this.id),r(t,"attribute",this.attribute);for(let o in this.attribute)this.attribute[o]=e.getAttribLocation(this.id,o);r(t,"uniform",this.uniform),r(n,"uniform",this.uniform);for(let o in this.uniform)this.uniform[o]=e.getUniformLocation(this.id,o)}function jae(e){e||(e={});let t=0,n=null,r=!1,a=-1,s=[null,null],i=[],o=-1,l=-1,c=null,u=null,h={},d=e.canvas||document.createElement("canvas"),p={},f={INTERMEDIATE:1},m=d.getContext("webgl");if(!m)throw new Error("Filter: getContext() failed");this.addFilter=function(w){let _=Array.prototype.slice.call(arguments,1),N=h[w];i.push({func:N,args:_})},this.reset=function(){i=[]};let A=function(w,_){if(!(w===o&&_===l)){if(d.width=w,o=w,d.height=_,l=_,!c){let N=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,-1,1,0,0,1,-1,1,1,1,1,1,0]);c=m.createBuffer(),m.bindBuffer(m.ARRAY_BUFFER,c),m.bufferData(m.ARRAY_BUFFER,N,m.STATIC_DRAW),m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0)}m.viewport(0,0,o,l),s=[null,null]}},y=function(w,_){let N=m.createFramebuffer();m.bindFramebuffer(m.FRAMEBUFFER,N);let T=m.createRenderbuffer();m.bindRenderbuffer(m.RENDERBUFFER,T);let E=m.createTexture();return m.bindTexture(m.TEXTURE_2D,E),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,w,_,0,m.RGBA,m.UNSIGNED_BYTE,null),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.LINEAR),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.framebufferTexture2D(m.FRAMEBUFFER,m.COLOR_ATTACHMENT0,m.TEXTURE_2D,E,0),m.bindTexture(m.TEXTURE_2D,null),m.bindFramebuffer(m.FRAMEBUFFER,null),{fbo:N,texture:E}},g=function(w){return s[w]=s[w]||y(o,l),s[w]},b=function(w=null){var _,N;let T=null,E=null,M=!1;t===0?T=n:T=(_=g(a))==null?void 0:_.texture,t++,r&&!(w&f.INTERMEDIATE)?(E=null,M=t%2==0):(a=(a+1)%2,E=(N=g(a))==null?void 0:N.fbo),m.bindTexture(m.TEXTURE_2D,T),m.bindFramebuffer(m.FRAMEBUFFER,E),m.uniform1f(u.uniform.flipY,M?-1:1),m.drawArrays(m.TRIANGLES,0,6)};this.apply=function(w){if(A(w.width,w.height),t=0,n||(n=m.createTexture()),m.bindTexture(m.TEXTURE_2D,n),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.NEAREST),m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST),m.texImage2D(m.TEXTURE_2D,0,m.RGBA,m.RGBA,m.UNSIGNED_BYTE,w),i.length===0)return b(),d;for(let _=0;_<i.length;_++){r=_===i.length-1;let N=i[_];N.func.apply(this,N.args||[])}return d};let x=function(w){if(p[w])return u=p[w],m.useProgram(u.id),u;let _={};_.VERTEX_IDENTITY=["precision highp float;","attribute vec2 pos;","attribute vec2 uv;","varying vec2 vUv;","uniform float flipY;","void main(void) {","vUv = uv;","gl_Position = vec4(pos.x, pos.y*flipY, 0.0, 1.);","}"].join(`
|
|
`),_.FRAGMENT_IDENTITY=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","void main(void) {","gl_FragColor = texture2D(texture, vUv);","}"].join(`
|
|
`),u=new Hae(m,_.VERTEX_IDENTITY,w);let N=Float32Array.BYTES_PER_ELEMENT,T=4*N;return m.enableVertexAttribArray(u.attribute.pos),m.vertexAttribPointer(u.attribute.pos,2,m.FLOAT,!1,T,0*N),m.enableVertexAttribArray(u.attribute.uv),m.vertexAttribPointer(u.attribute.uv,2,m.FLOAT,!1,T,2*N),p[w]=u,u};h.colorMatrix=function(w){let _=new Float32Array(w);_[4]/=255,_[9]/=255,_[14]/=255,_[19]/=255;let N=_[18]===1&&_[3]===0&&_[8]===0&&_[13]===0&&_[15]===0&&_[16]===0&&_[17]===0&&_[19]===0?h.colorMatrix.SHADER.WITHOUT_ALPHA:h.colorMatrix.SHADER.WITH_ALPHA,T=x(N);m.uniform1fv(T.uniform.m,_),b()},h.colorMatrix.SHADER={},h.colorMatrix.SHADER.WITH_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[3] * c.a + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[8] * c.a + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[13] * c.a + m[14];","gl_FragColor.a = m[15] * c.r + m[16] * c.g + m[17] * c.b + m[18] * c.a + m[19];","}"].join(`
|
|
`),h.colorMatrix.SHADER.WITHOUT_ALPHA=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform float m[20];","void main(void) {","vec4 c = texture2D(texture, vUv);","gl_FragColor.r = m[0] * c.r + m[1] * c.g + m[2] * c.b + m[4];","gl_FragColor.g = m[5] * c.r + m[6] * c.g + m[7] * c.b + m[9];","gl_FragColor.b = m[10] * c.r + m[11] * c.g + m[12] * c.b + m[14];","gl_FragColor.a = c.a;","}"].join(`
|
|
`),h.brightness=function(w){let _=(w||0)+1;h.colorMatrix([_,0,0,0,0,0,_,0,0,0,0,0,_,0,0,0,0,0,1,0])},h.saturation=function(w){let _=(w||0)*2/3+1,N=(_-1)*-.5;h.colorMatrix([_,N,N,0,0,N,_,N,0,0,N,N,_,0,0,0,0,0,1,0])},h.desaturate=function(){h.saturation(-1)},h.contrast=function(w){let _=(w||0)+1,N=-128*(_-1);h.colorMatrix([_,0,0,0,N,0,_,0,0,N,0,0,_,0,N,0,0,0,1,0])},h.negative=function(){h.contrast(-2)},h.hue=function(w){w=(w||0)/180*Math.PI;let _=Math.cos(w),N=Math.sin(w),T=.213,E=.715,M=.072;h.colorMatrix([T+_*(1-T)+N*-T,E+_*-E+N*-E,M+_*-M+N*(1-M),0,0,T+_*-T+N*.143,E+_*(1-E)+N*.14,M+_*-M+N*-.283,0,0,T+_*-T+N*-(1-T),E+_*-E+N*E,M+_*(1-M)+N*M,0,0,0,0,0,1,0])},h.desaturateLuminance=function(){h.colorMatrix([.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,.2764723,.929708,.0938197,0,-37.1,0,0,0,1,0])},h.sepia=function(){h.colorMatrix([.393,.7689999,.18899999,0,0,.349,.6859999,.16799999,0,0,.272,.5339999,.13099999,0,0,0,0,0,1,0])},h.brownie=function(){h.colorMatrix([.5997023498159715,.34553243048391263,-.2708298674538042,0,47.43192855600873,-.037703249837783157,.8609577587992641,.15059552388459913,0,-36.96841498319127,.24113635128153335,-.07441037908422492,.44972182064877153,0,-7.562075277591283,0,0,0,1,0])},h.vintagePinhole=function(){h.colorMatrix([.6279345635605994,.3202183420819367,-.03965408211312453,0,9.651285835294123,.02578397704808868,.6441188644374771,.03259127616149294,0,7.462829176470591,.0466055556782719,-.0851232987247891,.5241648018700465,0,5.159190588235296,0,0,0,1,0])},h.kodachrome=function(){h.colorMatrix([1.1285582396593525,-.3967382283601348,-.03992559172921793,0,63.72958762196502,-.16404339962244616,1.0835251566291304,-.05498805115633132,0,24.732407896706203,-.16786010706155763,-.5603416277695248,1.6014850761964943,0,35.62982807460946,0,0,0,1,0])},h.technicolor=function(){h.colorMatrix([1.9125277891456083,-.8545344976951645,-.09155508482755585,0,11.793603434377337,-.3087833385928097,1.7658908555458428,-.10601743074722245,0,-70.35205161461398,-.231103377548616,-.7501899197440212,1.847597816108189,0,30.950940869491138,0,0,0,1,0])},h.polaroid=function(){h.colorMatrix([1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0])},h.shiftToBGR=function(){h.colorMatrix([0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0])},h.convolution=function(w){let _=new Float32Array(w),N=1/o,T=1/l,E=x(h.convolution.SHADER);m.uniform1fv(E.uniform.m,_),m.uniform2f(E.uniform.px,N,T),b()},h.convolution.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","uniform float m[9];","void main(void) {","vec4 c11 = texture2D(texture, vUv - px);","vec4 c12 = texture2D(texture, vec2(vUv.x, vUv.y - px.y));","vec4 c13 = texture2D(texture, vec2(vUv.x + px.x, vUv.y - px.y));","vec4 c21 = texture2D(texture, vec2(vUv.x - px.x, vUv.y) );","vec4 c22 = texture2D(texture, vUv);","vec4 c23 = texture2D(texture, vec2(vUv.x + px.x, vUv.y) );","vec4 c31 = texture2D(texture, vec2(vUv.x - px.x, vUv.y + px.y) );","vec4 c32 = texture2D(texture, vec2(vUv.x, vUv.y + px.y) );","vec4 c33 = texture2D(texture, vUv + px );","gl_FragColor = ","c11 * m[0] + c12 * m[1] + c22 * m[2] +","c21 * m[3] + c22 * m[4] + c23 * m[5] +","c31 * m[6] + c32 * m[7] + c33 * m[8];","gl_FragColor.a = c22.a;","}"].join(`
|
|
`),h.detectEdges=function(){h.convolution.call(this,[0,1,0,1,-4,1,0,1,0])},h.sobelX=function(){h.convolution.call(this,[-1,0,1,-2,0,2,-1,0,1])},h.sobelY=function(){h.convolution.call(this,[-1,-2,-1,0,0,0,1,2,1])},h.sharpen=function(w){let _=w||1;h.convolution.call(this,[0,-1*_,0,-1*_,1+4*_,-1*_,0,-1*_,0])},h.emboss=function(w){let _=w||1;h.convolution.call(this,[-2*_,-1*_,0,-1*_,1,1*_,0,1*_,2*_])},h.blur=function(w){let _=w/7/o,N=w/7/l,T=x(h.blur.SHADER);m.uniform2f(T.uniform.px,0,N),b(f.INTERMEDIATE),m.uniform2f(T.uniform.px,_,0),b()},h.blur.SHADER=["precision highp float;","varying vec2 vUv;","uniform sampler2D texture;","uniform vec2 px;","void main(void) {","gl_FragColor = vec4(0.0);","gl_FragColor += texture2D(texture, vUv + vec2(-7.0*px.x, -7.0*px.y))*0.0044299121055113265;","gl_FragColor += texture2D(texture, vUv + vec2(-6.0*px.x, -6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2(-5.0*px.x, -5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2(-4.0*px.x, -4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2(-3.0*px.x, -3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2(-2.0*px.x, -2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2(-1.0*px.x, -1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv )*0.159576912161;","gl_FragColor += texture2D(texture, vUv + vec2( 1.0*px.x, 1.0*px.y))*0.147308056121;","gl_FragColor += texture2D(texture, vUv + vec2( 2.0*px.x, 2.0*px.y))*0.115876621105;","gl_FragColor += texture2D(texture, vUv + vec2( 3.0*px.x, 3.0*px.y))*0.0776744219933;","gl_FragColor += texture2D(texture, vUv + vec2( 4.0*px.x, 4.0*px.y))*0.0443683338718;","gl_FragColor += texture2D(texture, vUv + vec2( 5.0*px.x, 5.0*px.y))*0.0215963866053;","gl_FragColor += texture2D(texture, vUv + vec2( 6.0*px.x, 6.0*px.y))*0.00895781211794;","gl_FragColor += texture2D(texture, vUv + vec2( 7.0*px.x, 7.0*px.y))*0.0044299121055113265;","}"].join(`
|
|
`),h.pixelate=function(w){let _=w/o,N=w/l,T=x(h.pixelate.SHADER);m.uniform2f(T.uniform.size,_,N),b()},h.pixelate.SHADER=["precision highp float;","varying vec2 vUv;","uniform vec2 size;","uniform sampler2D texture;","vec2 pixelate(vec2 coord, vec2 size) {","return floor( coord / size ) * size;","}","void main(void) {","gl_FragColor = vec4(0.0);","vec2 coord = pixelate(vUv, size);","gl_FragColor += texture2D(texture, coord);","}"].join(`
|
|
`)}var Et=null,Jt=null;function K6(e,t){let n;if(e instanceof et)n=Nr(e);else{let r=e.naturalWidth||e.videoWidth||e.width||e.shape&&e.shape[1]>0,a=e.naturalHeight||e.videoHeight||e.height||e.shape&&e.shape[2]>0,s=r,i=a;if(t.filter.width>0?s=t.filter.width:t.filter.height>0&&(s=r*(t.filter.height/a)),t.filter.height>0?i=t.filter.height:t.filter.width>0&&(i=a*(t.filter.width/r)),!s||!i)return Ue("Human: invalid input",e),null;(!Et||Et.width!==s||Et.height!==i)&&(Et=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(s,i):document.createElement("canvas"),Et.width!==s&&(Et.width=s),Et.height!==i&&(Et.height=i));let o=Et.getContext("2d");if(e instanceof ImageData?o.putImageData(e,0,0):o.drawImage(e,0,0,r,a,0,0,Et.width,Et.height),t.filter.enabled){if((!this.fx||!Jt||Et.width!==Jt.width||Et.height!==Jt.height)&&(Jt=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(Et.width,Et.height):document.createElement("canvas"),Jt.width!==Et.width&&(Jt.width=Et.width),Jt.height!==Et.height&&(Jt.height=Et.height),this.fx=pa.flags.IS_BROWSER?new jae({canvas:Jt}):null),!this.fx)return Et;this.fx.reset(),this.fx.addFilter("brightness",t.filter.brightness),t.filter.contrast!==0&&this.fx.addFilter("contrast",t.filter.contrast),t.filter.sharpness!==0&&this.fx.addFilter("sharpen",t.filter.sharpness),t.filter.blur!==0&&this.fx.addFilter("blur",t.filter.blur),t.filter.saturation!==0&&this.fx.addFilter("saturation",t.filter.saturation),t.filter.hue!==0&&this.fx.addFilter("hue",t.filter.hue),t.filter.negative&&this.fx.addFilter("negative"),t.filter.sepia&&this.fx.addFilter("sepia"),t.filter.vintage&&this.fx.addFilter("brownie"),t.filter.sepia&&this.fx.addFilter("sepia"),t.filter.kodachrome&&this.fx.addFilter("kodachrome"),t.filter.technicolor&&this.fx.addFilter("technicolor"),t.filter.polaroid&&this.fx.addFilter("polaroid"),t.filter.pixelate!==0&&this.fx.addFilter("pixelate",t.filter.pixelate),this.fx.apply(Et)}else Jt=Et,this.fx&&(this.fx=null);let l;if(Jt.data){let u=[Jt.height,Jt.width,3];l=Cf(Jt.data,u,"int32")}else if(t.backend==="webgl"||Jt instanceof ImageData)l=bu.fromPixels(Jt);else{let u=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(s,i):document.createElement("canvas");u.width=s,u.height=i;let h=u.getContext("2d");h==null||h.drawImage(Jt,0,0);let d=h==null?void 0:h.getImageData(0,0,s,i);l=bu.fromPixels(d)}let c=l.toFloat();n=c.expandDims(0),l.dispose(),c.dispose()}return{tensor:n,canvas:t.filter.return?Jt:null}}var Gae={backend:"webgl",wasmPath:"../assets/",async:!0,profile:!1,deallocate:!1,scoped:!1,videoOptimized:!0,warmup:"face",filter:{enabled:!0,width:0,height:0,return:!0,brightness:0,contrast:0,sharpness:0,blur:0,saturation:0,hue:0,negative:!1,sepia:!1,vintage:!1,kodachrome:!1,technicolor:!1,polaroid:!1,pixelate:0},gesture:{enabled:!0},face:{enabled:!0,detector:{modelPath:"../models/blazeface-back.json",inputSize:256,rotation:!1,maxFaces:10,skipFrames:11,minConfidence:.5,iouThreshold:.2,scoreThreshold:.5},mesh:{enabled:!0,modelPath:"../models/facemesh.json",inputSize:192,returnRawData:!1},iris:{enabled:!0,modelPath:"../models/iris.json",inputSize:64},age:{enabled:!0,modelPath:"../models/age-ssrnet-imdb.json",inputSize:64,skipFrames:31},gender:{enabled:!0,minConfidence:.1,modelPath:"../models/gender-ssrnet-imdb.json",inputSize:64,skipFrames:41},emotion:{enabled:!0,inputSize:64,minConfidence:.2,skipFrames:21,modelPath:"../models/emotion-large.json"},embedding:{enabled:!1,inputSize:112,modelPath:"../models/mobilefacenet.json"}},body:{enabled:!0,modelPath:"../models/posenet.json",inputSize:257,maxDetections:10,scoreThreshold:.5,nmsRadius:20,outputStride:16,modelType:"MobileNet"},hand:{enabled:!0,rotation:!1,inputSize:256,skipFrames:12,minConfidence:.1,iouThreshold:.1,scoreThreshold:.5,maxHands:1,landmarks:!0,detector:{modelPath:"../models/handdetect.json"},skeleton:{modelPath:"../models/handskeleton.json"}}},v2=`
|
|
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`,k2=`
|
|
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
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAa2p1UYo5adbz+xbxMlvqJ1OqjDHLXree0ejmzNrWm953tPmTPWbWneZ7yoy5YhjrXXTjH8s75N
|
|
mtkyxt0VZM2/m175N1V03yTKubMLXVXybeYLLX2VXy7eam+b0bOg4VquJW+rry4/O9uyZOq3UjVm
|
|
9r25axMzPaIdvhns1kzbZddM0p5Y47z8/R2+HcF03Doi1a8+Xzvbv+TotJnjDXkt+K8ODHp8cY8N
|
|
IpSO0RCwF2YAAAAAAAAACvUZYw6fJkntWN3k8dfHz2vLucdz8mkjFE9bz1+UOZosX1UzPm0nqI/W
|
|
MYo9FlcPNklfFGeH/NshLGun+Cz6PtHZtVZWlRLS+jxPkRpIn7rdoupHTdA5s6SI+7H6Mfo+32Y2
|
|
+To3neSIiZ7A0IjPXpXLePlMotGW3272t85datKzHZjbTVnsDj+FG/2Y/RlGP4R+jo20u7H6N1Ql
|
|
o+H8I/REY957R+jpfReiK6eOYHLtj2tttH6KrY/6Y/R2c+kjeJiFVtLG24hxpw7/AHY/RRkw9O37
|
|
O99Hrt1YX0tfOBLjcGp4XF8c+u8fs9c4dcVcGemSI61nd3IneN1orQAAAAAAAAAAAAABFqxes1tE
|
|
TE9JiUgPKcX4RbRXnNgiZwWnrH4XPi28PdXpW9JraImsxtMS8pxXhF9DecuGJtgmf+1TWW2N/la1
|
|
L7N7T5e3Vy6W3hsYcvLbqzbO9jvvCzvDR0+XeO7crO6FmGSvRThy/RtVXJ92elvk2rRvDUzU7pl4
|
|
izsd2J3jeBpcNz+Lg5LT7+Pp+Xk3W7js5eAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADs0NTrN96Yp6edkW8Wzm6+LNTq4pvTHO9vOfRoWtt
|
|
1mes95YWvs1s2fZldddOczLPLn2ju0MmebT3YZc2/mpm3qqllN1drsbZIhr3yzvtHf4AsvlYYseb
|
|
V5Yx4KTe0+UQ6nDvZ3UazbJqd8OKeu33peq0eh0+hxcmnxxWPOfOfm0mP+steT/ji8N9mKY9suum
|
|
L37+HHaPm9DSlaVitKxWsdohI0Y22gAgAAAAAAAAAABXnyRhw3yT92Nwef4xm8bVzET0rPJH5d12
|
|
CvLhho3rN9RWs9Z23n5y6O21YhrVYbdGOCfrrLPJRpv863zVS6FS09SvZj3lVZZRdPSqmnSWdrIE
|
|
ebOkK4ldTsgW1WKqd1oMZhEVZyRAImOjGI6rJ7IiATNd46qL02bHkiaxaoNGY2n4ImPgtyV2n0Vo
|
|
Gvlx7x2beiyTk08RPevSVUxux00+Fn2n7N+n5rRFb4AAAAAAAAAAAAAAACLVres1tETWekxKQHlu
|
|
L8InR2nPp43wz3j8P/s5dLveWrFqzW0bxPeJeV4xwmdFec+CJnDM9Y/CrY1xv8qvTZ+WYdbDk5oh
|
|
5zHk283U0eo3jaZZ2N5XYjrCnLSJhOK+8d1kxvCqzSwZvousrb7k9LfJ3nB1OLeJdLhufx9LEWn3
|
|
6e7LXN9Ofy5/W4AuxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAETaKxMzO0Qi9646Ta07RDmZ9VbPbaOlI7Qi3i+c3TPUaqcu9adKfy0722ZXvFa9
|
|
XO1OrjrESxt66ZJmcjPUanlidmhkzTZVfLN5VWvsC2b7R3U3yqrZZtO1esz2h2+F+zWTUcuXXTNM
|
|
feKR3n5+iZLVbqRzNJo9TxHLyaekz62ntD1fDOA6fQbZL7Zc/wCKY6R8odLBgxabFGPDSKUjyiFj
|
|
SZkYa3aALKAAAAAAAAAAAAAADQ4pl2pTFH3p3n5Q33E12Tn1eSfKscsLZ+orS00eJqbW+Lfnu1tF
|
|
XaJnZsz3WpCfsyp00fWSvmPdVYOmSUDd8kR3InoQosy7JmUX7MdwZ17ro7KKT1XRPRAsrO0rYndr
|
|
79V1ZBaQiJ6JgCSIJASwrO07MpV2nqBlrv1a1o2bf2qtfLXaQUTO0sb05o3jv3ZXhjS20xEphW5h
|
|
yeJjjf7UdJWNKLziyRePsz0lux1SgAQAAAAAAAAAAAAAADG9K5KTS8Rato2mJZAPIcU4ZbQZuekT
|
|
OC3afT4NXFkmlntc2GmoxWx5K71tG0vHa/RX0GpmlutJ61t6wrY2xr8dXS5uesN+tt4ef0eaa223
|
|
2dnHk3juyreM81OaFGiy/RtZET9jJ7s/2bdutd2jqKeic3iNTsd8a2h1H0jTVtP2o6W+bZbOO+gA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABje9cdJt
|
|
adohGTLXFTmvO0fy52bJfU23t0pHaqLeL5xdK9Rnvqb+cUjtCi94xxvK3JetKuHrdZvaa1ljb10y
|
|
cnIs1Wt3naJc++TmVWvMz1YWybfMGdsm3eWek0mo4jm8PT0mfW3lDf4V7P5tdMZdRviwfvZ6/TaX
|
|
DpMMYsFIpWPTzXmf+steT8jn8L4Dp+HxF77Zc/4pjpHydYGjC3oAAAAAAAAAAAAAAAAADG9opS1p
|
|
7RG7zszN6WtPe0zLua+3Joss/wBOzhzG2OsL5+IrY09dsSyYRijbHEMvOChb7KjF0yS2LQ169Mso
|
|
S24noyrPVXWejNVKbTuw3T3REdQWU6LYlVvsyiUDPfqupPRr79VuOQX1lZEqoZxIMksd0gT2VT0l
|
|
bPZVbuCaW8i8bwr32WxbcGnkjaZa9p2ndv5qbw5+aNugLItF6TEtvTX5sMb969HMpfazc0d9stqe
|
|
vVZDdAQAAAAAAAAAAAAAAAADV1+iprtPOO/2u9bektoB4TJTJpNRbHkja1Z6uto8viVht+0HDvpG
|
|
H6Tjj6zHHvbecONw7Ltfkmeqmo6Ma69DXbbZTkr1mGWO3RneOaGbZRoM30fVzSelMnT83aef1FZ7
|
|
x3h1tBqfpGnjmn369LNc3sc3kzy9bQCzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAa+q1dNNXr7157VhGp1Xh70x+9f9ocy283m1p5rz3mVbrjXHjt91lz
|
|
5c9+fJ1nyjyhdM8lZlOOIiqrUXikd+kMreunnI5XEdX4dZiZcG+XmtNl/F83PeeWWHDOGanieSKY
|
|
q+5H2rz2hMzWd1Iqx1yajJXHhrNrW6REeb1nCPZumn2z62Ivl7xTyr/6uhwzhGn4Zj2xxzZJ+1kn
|
|
vLoNJnjHW7TbbsAszAAAAAAAAAAAAAAAAAAAAaPFrbaSK/itEOXt0rDf4xb/ACa/GZacRvaF58Q2
|
|
IjasQnzPIhCU92tMbZGzHmotG10C6nZkwpPRmipIllEbMIZIE7solgmJBnCyk9VMM6z1BtVllEqK
|
|
z0WRILYlluriWcSDJVbusV27gwInaSWM9ECyZ3hqamnSWxFmOSOaqRx725bNnSZNs9J+OynVY+WZ
|
|
YYr7TE+nVaIr0Ais81Yn1hKAAAAAAAAAAAAAAAAAABExvG09peU4nov9n66L0j6q/WPg9Y1OJaON
|
|
ZpL0+9HWs/EWzeVz9PbmrEtnyc3h9reHy26TWdnSr2YX6657ijLXpLX0+onSamL/AHJ6W+Tbv2aW
|
|
ekTv16JzeI1Ox6KJiYiY7Slz+E6jxdN4dp3vj6fl5Og2clnKACAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZ2jeQRMxEbzO0Q08uqtkma4ulfO3r8lefUePMxWf
|
|
cjy9WvlzVxV6T1Z61/x0Y8f7Wc7Ur1lqVy+LqOWJ2hp6rXddon5rOF1tfmz5OkT0qzb8dWbxjp1c
|
|
biuuilJ5Z6r+IcQrixzEy8zl1E6rNt1tMztFY81sztU1eRucN4ffi2p5esRM72n0h7rS6XFo8FcO
|
|
CkVpX082nwXh3+z9FWLxHi36328vg6TZyW9ABAAAAAAAAAAAAAAAAAAAAAADj8Unm1tK/hqppHvw
|
|
y1k8/EMk+m0GOPeafiFpCZYwolnXspvHvLa9mF46gmnZmwozRUiUCBKYYsoBLOFbKAX0llEqqyzi
|
|
QXRLOJVRLOOwLIljZMEgrlhKyYYTAK5nZPN0RZjugUanHzVlz6xtLq361c+9eXItPpXX0dubTU+E
|
|
bL2lw2++O1fSW6m/VYAISAAAAAAAAAAAAAAAAAp1GbwcfTreelYEydcuMcRrM/L9nnlsV6wqpi2r
|
|
tv133mfWVkRyRtEdGFva7MzkYZNoamWN4bV4mYa9qztKIujhVppxGI8r1mJegeZpknBqKZY+7L0t
|
|
LRekWrO8TG8Ns/HJ5ZypAWZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAADS12fp4VJ6z9qVuq1HgUiI+3bpDl589cOKZmevqprXPTbx477rDJlrhr1nq4+s182tMRP
|
|
RqaziXiZJrWekNG17ZbxWJ336M5LXRbI3dLTJrs07RMY6fan1dHLrowY+X7MVjt6N3R6Kul0EbWm
|
|
s7bz8Z+LnabQX43r7Y53php/mXj+Dnv0f1JO1x/8ZxbUzj02O15mfLtD13AvZqnDds+pmMmo26el
|
|
XX0Wh0/D8EYtNjilY7+s/NstpOOTW7QBKgAAAAAAAAAAAAAAAAAAAAAADG88tLW9I3BwJtz6nNf1
|
|
vK/DHVqYJ3pzT5y3MPZeojOWMQylEKpTVjZnDCwkqzYQyRRICATCITAJZQxhMAshnEq4ZQC2srKq
|
|
qrIBZCWNZZgwswmFloVyCu0dFcx1WyrtCBhv5NTPHXds2U5o3hIz4ffbPt+KHUcTSW5c9Jme0u2v
|
|
VYAKpAAAAAAAAAAAAAAAAYZctcVOa35R6tLrltN795/YvknNqrfhpPLH92V5isd9mWq6fHjk6rn0
|
|
ZxG8KK5Jm/wbVZiYZtqrmkqL023bkxvCiY3lJHNyRG81mHS4Rn5sNsNp64+3yaWaNrzOzHBl+i6q
|
|
mT7s9J+S+ay8mex6EIneN47SNXKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAImYiJme0JafEs3h6fkidrZOn5eaLeJk7eOdm1Hi2vmtPTry/CHmOJcUvmvOPF1n09Pm
|
|
6HF9ZGm01qxO3R5vSY7XwzmzTy47zzTEd7en5Mfvt2/PURWdo3tvPrPlKymbktFqTtMTvHzbOLDG
|
|
f63JXbFX7FdnoODcDprZpq9TjiMMTvSn4vj8l5fxnrk91saPSa7i2hpOfbTVt5x1m0fLydzR6PDo
|
|
dPGHBXasd585n1lsRERG0dIF5OOe6tAEqgAAAAAAAAAAAAAAAAAAAAAAADX11+TRZrf0y2Gjxe22
|
|
gtH4piP3TPpXKwxtjhuYo9xq442iIblI2pC1RET2ILd9kxCqRjZmwlCSEohIJAQAAJZISDKGUd2M
|
|
MoBnVbVVCyAWVWeSuqyOwIlXZZKue4MJV2WWYT2QKbKL9YlfdRdIo35b7/Hd3KTzUrPrDh27uxpb
|
|
c2mpPwX/ABX9XAKpAAAAAAAAAAAAAACekTIp1eTwtJmv+GkyJn1oafeazbfpMzLR4jq/o8b823zX
|
|
6XNF8ERCvTcNpxLV5LauvPhx9Irv3lhztdtv8TtaWLicXrt03jzjzb2k1nid56ty3s/w+a7Uwzjn
|
|
1raejlarhmbhl/FpbxMO/fzj5p/ixSeXOvTtRfeI280ZI26tfDm3pWe63LaZx7qtGvniJ6tPLvOK
|
|
fOa9WzbJvTbza02jl3n5SSljscK1MajSxWZ96nSW88xw/VfQ9XMT9nfa3yemid43jtLeXsce88qQ
|
|
EqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADia3UTm1l4j7OP3Y/u
|
|
7Vp2rM+kPJW1PhYcmS0+9MzKm/jbwz31weMzbV8UppazPL9q0/BF4rk1GLDSNqxPWPhCnHmnNrtT
|
|
qPKteWPm6U6OdHaZvO+SaRNvhv12Ub/q3FhtrNVj0uKOt56z6R5y9zix1w4qY6RtWsREOJ7L6OKa
|
|
S2rvX6zNM7T6Vh3mmZyOfya7eACzIAAAAAAAAAAAAAAAAAAAAAAAAAAczjVvqMVfW/8AZ03I41bf
|
|
Lp6/OVs/UVrY47NyOzUxd4bUJpEbb3Z7IiOrKIVSjZhMLJYyhKIgmGUQSDESIEbJEgQmCITEAmGU
|
|
IiGUAyhZVhDOoM4Wx2VQtqBKuyyWEgqlhKyyuyBVaGtkbNmvk7A15l1eH2300R6TMORPSXT4ZO+O
|
|
8fFefEX63gEAAAAAAAAAAAAAAAq1WPxdLlp+Kkx+y1Fvsz8gjhaDauGK8sx07y3OE3m1tT6RaP4c
|
|
vU6yMNKUx73zT0ilY3l2eF6a+m0kRl/zbzz3+Ez5M8z26fJruW6wzYq5sV8d43raNpZjRzPPaTmx
|
|
5b6bJ9rHO3zb2WJ8GWPEscY9bgzxH2t62n19GWW0eHOzHU5XbjXZ1x8WTnz2iZ7S2M1IjH2+LX0V
|
|
KTqs8zO9ot0j8nUthi1J3UaOFMTfLFo6xMbS9BwHWTqdHOO8+/hnln5eTjYMFo1WTH5VnePzXcIm
|
|
2k4zlpPSmXy/hfF5eMfJns69OA2cgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAADG/2LfJ874rW845mubliY7bPoto5qzHrDz0+yePNF41OotaJ7RWNtpV1OtfHqZ715fhu
|
|
j8adNpcVfeyzE2/vLuanhOu1nEctIxTTFa/+ZPbZ3eHcF0vDbTfFE2yzG03t32+DokynXl9+leDB
|
|
TTYKYccbUpWIhYCzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAcXjE/4zDH9M/wAu04XF5/3jj/0f3Wz9
|
|
RUYmzDWxS2I7FSyjuzY1ZKpRKEygEwiWUIkGIk2QJNhKQhMIhkCYZQxhlAMoZwwZwgWQshVCyATL
|
|
CWc9ldpBhZXLOVdpQK7NfJPRdaWvknoDVvPvOnwuel4+TlXn3nS4VPvXj4QtEV0wAAAAAAAAAAAA
|
|
AAAAAVV02CmTxK4qRf8AFFeq0AAAanEsfPpZmO9Ji0NDLfkwdOsulrumiyzHlVzJrz4Ovoy26vB8
|
|
cTBa9NffLtMY77Rv8Yegx5ImkKdJoY1HC81Y+3OSbVn0mGGkmbY45u6tnrrTOu2xGO0RxCd+nNVj
|
|
qKxTV1vH2pjaGtnyzXXYdo96ZmGXEMk15b7/AGZiVerWPTYckZcNbx5wzc7hGbnxXxzPWk7x8pdF
|
|
0S9jh1OXgAlUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAcPjEf4/FP9H93ccXjMf4vDP9Mx+62fqKrx+S+GvibEFSsqyYwlVK
|
|
ZYsmIMoRKYJQIPIEiQ2ATCUQygCGUIhMAyhnDCGUIFkLIV1ZxIMpVWWSrsCuyqyyyq09ECq8tfJK
|
|
66jJ2Bp5J6upwn7dv9Lk5J951uE/av8AJaIrqAAAAAAAAAAAAAAAAAAAAAAq1Mc2myxPnWf4cmtu
|
|
XT9fR0tffk0WSe28bfq5Wbamm3326MtunwfK6PCv/AxPraZ/dz9PO97/AOqf5dHhdZrw7Dv3mOb9
|
|
XOxRFM+avpe38mvkPHf/AFWlrKba7Tzt99ZxKkfR7euyNXMTrtPHfa0z+zPiM/UR8Zj+Wbdu8HpN
|
|
M2bfzrV13M4dO2pyR61dNvj44/J/oAWZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj8bj63BPzdhyeNx0wz8ZWz9RWri7Nmv
|
|
VrYu0NmqaRZHZlDGGSiwxZSgCEkCBCQSCQBMJRCYgEsoYx3Z17AlMIhlCBnDOGEM4AlhZZKq4KrK
|
|
7LLKrIFN2vdfZReAaObu6/CO9vk5OePR1uEd7fJeIrqAIAAAAAAAAAAAAAAAAAAAAGtxCk5NFliI
|
|
3mI32+XVyNTyZOHTee946PQKPoeDffw4777eW/yVs60xv+ZxOnr4Okx1t05KRv8Ao41Z5q3yed5m
|
|
XY1szXRZ5jvFJ/hxItP0aOSN9q7yrtr4f2tHFM5+KT16Yq/vK/iGSbXw4vO14UcPx5MGfNbPG18m
|
|
1oj4THRsTw7VanPXVYpi3gzMcnrvCnG11JOupwuN8+a3pEQ6jT4divjxWnJExa09pbjbM5HHu90A
|
|
JUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAHM41H1GOf6nTc/jEf4Ws+lls/UX45uGekNujTwdm5RNIthKIZKLDFlsiQIShIC
|
|
EgCUJ7AmGTGO7IDzZQhMSDJMMYZQgZwzhhDOATuqssmVdgVWVWWyqtCBTeVF19lF+wNLNG7q8I+9
|
|
8nLyupwnt+S8RXUAQAAAAAAAAAAAAAAAAAAAAAAItWL1mto3iY2lyrcLyUxzix2ia2nvPeK+jrCL
|
|
OrTVnxpanhuPPemSs8l6RtE7dJj0ldpNP9GwRSZ3neZmV4cR/Vs4AJQAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHi1d9H
|
|
M+kt5ra+vPoskfDdOfqK4mn7Q3aNHBPZu0W0RdDOGFWcKLCJZeTGQQlCQSgASBsCYZQxhlAJTAmA
|
|
TsmAgGcM4YQyjsgRLC3VnaVcgwsrt3Z2V2QK7tbJ1bN5a9waeWO7p8Knt8nNyebpcK8vkvlFdQBA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9RXmwZI+ErEWjesx6wQeZwejeo0cccuW8
|
|
elpblJaaRGxVnCuss4ZrMvJEgCAASISCQIBlCYYpieoM0wx8k7gzIRueYM4Z79FcSy3QEsLJmWFp
|
|
BjaVVpZWlXMoGNmvkXXlr3kGtknu6XCf7OXkl1OEdl8orqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAHmskcmtzV/rls0U62OXiWX4zErcc9GmkRfWVkSqqziWayxCPIANwBIhIJSxS
|
|
CRG6dwZwlhEs4BluMdzfqgZxLLdXuy3AmVdpZTKuZBjaVVpWWV2QlhZRdfZRcGpl7urwfrzfJy8r
|
|
rcH61vPyWitdMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHA4nHLxKZ9awnH2ZcY
|
|
jbW459aq8fZpfiI2IZwrqzhmsz3Ebm4JN0AMhCQSIASndiAziWUSriWcAyRujc80DM3RCfIETLCW
|
|
UsZEsJYSslXZAwlTddPZTkBp5e7r8Gj6rJPxhx8k9Xa4PG2C8/FaK10QAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAcfjcbZMFvnDWx9m5x2PqcNvS+zSxT7sNPxH62YZQwqzhRZO6UCB
|
|
KUAJTux3SDIRuAncQAmJZRLBMSgZ7iIAZRKd2DICUSlAljLCYWMLIFVukNfI2bNbIDTyT7zu8Ijb
|
|
Sz/qcG/2nf4T/wCE/wD2WnxWt4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHL9oL
|
|
+Hw2cm28VvEuPptfgyVj6yIn0no7/FtJfW8NzYMe3PaPd39d3iMug1WktNc2C9dvPbeP1aZ9xF+v
|
|
T471tHu2iflK2HkqWmvaZj5Surqc9Ps5bx+alTHqYHm68S1Vf/NmfnC2vGNTXvyT84Ql6A3cSvHM
|
|
sfaxVn5Ssrxyv3sM/lKB1xza8bwT3pePyWV4tpZ+/MfOEjfGrXiGlt2zV/PotrqcN/s5aT/+wLRj
|
|
FontMSlAlKEgndO6IAZQljDIEgeQljLCzOVdkCu/SGrkbF56NPNeKxMzMRHxENe0+89DwuNtHHzl
|
|
5PJr8NcnLW3Pbf7r1nCZm2gpae8zMrz4i/W6AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAETETG0xukB4HVaeMHEtRi26RedvkyjBSfX9W77QYvC4xz7dMlYlrU7M929dWJLFc6aPK0q
|
|
7YLxPS0S22FlP6q38Zac0yR92s/KVc3tHfFf8tpbcsLRvB/dR/8ALLVnU0r9uL1+dZI1mnmdvGpv
|
|
6TOy6ym+Oto2tWJ+cJ/tW+KLK5KW+zes/KU7tG+h01p64qx8Y6NXNo6Y+uPJlp8rLf0rfG7MXtHa
|
|
0x8pZxqs9e2a8f8A7Oj7HaTHn0+f6RWM23LETfr6vRW4PoL99NT8ui7F4+vEdXXtnt+fVbXjGsr/
|
|
AOZE/OsPS29nuH27YrV+VpeV9pdPXhOtw49NG9Mld55+vXcTPd42I47qo7xSfyWV9oM8d8VJ/VxM
|
|
d8l46xWF9cV7en6o/qLfxp2I9ob+eCv/AHMo9op89P8A/wBORGmyT5R+qfo2X8P7n9Q/jTsx7RR5
|
|
6ef+4/8AuHftg/8A6cWcOSO9J/WEbWr3pY7Efzp2Lcfv5YK/9zWy8d1E/ZpSv5Oba1/+Hb9lc+LP
|
|
bFt87I7E/wAabWbiurvEx4nL/pjZzc2bJkn372t85ZXx55/BX85lucC0vPxnTxlnnjm32mOiZqUu
|
|
LJ2p4TwnVavNWaYbRTfre0bQ99pcH0bT0xb78vmtiIiNojaErMwAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAHnfarF7umzRHaZrLjYrdIen9ocPi8JyTt1xzF4eUw23rCm3R4r6bMy
|
|
wt6kdTaWLdjswmNoZontsCm0K5XWjopnuDC0dGpqG5bs08/daKV672MjbSaif6oh6Z5f2LtvptRX
|
|
0tEvUN3Jfo8f7cYve0eX4zV7B5z20xc/C8eSPuZIRficfXlcPaG7ino08HWIbePpLF2NuiyOyrHK
|
|
3fZFSwuovHVfaVF4QK5YWTM9UT0EKry6Ps1Tn4zjn8NZn9nOtLseydObiWW34cf918fWfk+PYANn
|
|
KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq1WKM+ly4p+/WYeBxTNd6zG0xO0
|
|
vobw3FcP0bi2em20Tbmj5Srr418V9sa2Z7qKyzi07MXUylhaU7yjqhLCeiq3ddaFNxFYW7NLNG8t
|
|
zya+WO6Va9J7FW66mvwidnrXiPY3Ny8RyUn71Jj9Ht3RPjk19HK9pMHj8D1ER3rHN+jqqtTjjNps
|
|
uOe16zAifXzfTz7kNyndpYazS9qT0mszDdoxrsi6m8LazMq6zDOsq1ZEyrt1WWlXaUCqyq0rbKbi
|
|
Fdp6PReyFd8uqv8ACsfy83aXrPZHHto89/xX2/SP/dpj6y8vx6EBq5gAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAB5n2q03LfDqqx39y39npmlxbS/TOG5se29tuavzgWzeV4mtui2
|
|
O3RRSY2hdVhqO2MvI36iu9lUsrSrvDHn6spnmSiq5jooyV6tq1VV69RC32byTh43h8otMx+r6I+Z
|
|
aK/g8TwX7bXh9Mid4iW+fjl8n1ICWb57xLBOm4zqse20Tbmj8+qKdnS9q8PhcTw5tumSm0/OHMxz
|
|
0Za+uzx3sX1t0Zxurr1ZxvspWiZYWZbsbT0QK7KLrZVZJFaqt5vbezNOTg9J/FaZeJns93wCvLwb
|
|
T/GJn92uGHldIBowAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADuAPA67F9H4l
|
|
qMW20VvO3yRWW97T4fC4rXJHSMtI/WGhVlue3b473K2KzMML4+62tujG9pnozXaOSOVFMnVbmq1t
|
|
trJRW5E7wwvUxTvCyY6CHOt7moxz6Wh9PxTzYaT61h8x1MbZK/OH0zTf+Fxf6I/htj45vL9WgLMn
|
|
mvbPFvocGWO9L7fq85p5maw9d7VYvE4JkmPu2if3eW0+PasdFNOnxfF1Y2hlykRsmY+LJ0MZjZXa
|
|
eq2eyi8oQTO0KLdZWzPRjWu6VaqtHR73g0bcI0sf0Q8Nkq93wqNuFaWP+XDTDDytwBowAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAef9q8HNpcGaI60vtPyl56k9Iew49j8ThGe
|
|
PwxFv0l4zH2U26fDfTYiyJljvsjf4sm6vJ1hrXjq2MkqLdZEVbgbMx0auGdmzNt6iHN1Ub5af6of
|
|
TdPG2nxx6Vj+HzaaTm1+nx/iyVj930ysbViPRrj45vL9SAuyc7j1efguqj+jd4/T33rD3HEcPj8O
|
|
1GP8WOY/Z4TTT7sKadHhbcsZnaCJ3TPZk6VdrKbTutmP0U2nqgrGOsr8deiuI2X09EqKM1dt3uuG
|
|
f/jdN/06/wAPE546S9rwud+Gaaf+XH8NMMPK2wGjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAABrcRp4nDtRWPPHP8PCYusPoWSvNjtX1iYfPuWaXtX8MzCuvjfw32siu8ptXoxi
|
|
0wy5t4YulReqmazu2skbquURWFInddM7VYRGyL291KFnCcfj8e0le/Lbmn8n0N4b2Ur4nHLWmPsY
|
|
5e5a5+OXyXugBZmiY3iY9Xz7NjnTa3Ph/BeYj5PoTxftFg8Hjk2iOmWkW/Psrr418V5WrWd2faFc
|
|
V2jdnEMXWxntupmN7NiYU27iWML6dVMVnddjgVqMsdHr+CW5uE6f4Rt+7yuSsTDv+zWXn0WTHP3L
|
|
/tK+GHl+O0A1c4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8Dn93W56/wDM
|
|
t/L3z59qp24jn+OS38lnpr4r7ZxHQ2TEstt3PXUrt27K57rr1VT0BjKnJPRbMqMs7QlV2fYvHvrd
|
|
VknyrEfu9m8f7FZI8fVU85iJewbT45NfQBKo817W4eulzxHaZrL0rje09ItwqbfhtBVs3leai8RD
|
|
KLw1sduesL606dWFdsZT1jdhNeq6K9DlhCVUU6s4jZnt1YzAhnM71dH2bycmszY/K1d/0c6OzY4R
|
|
fwuK4p8rTstn6z8k7HrwGzkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHz3
|
|
Vxvr80/8y38voTwGpj/F5/8AqT/JfjTx/WVeyY6FPspc9dZPVXaOq2WEwIUTVRmjo2rNfLHRI3vZ
|
|
DJycXtX8dZh7t879nsnhcbwz23tt+r6I2nxyb+gCVBzuPY/E4PqI9K7ui19fTxNBnp60n+Aj5/pJ
|
|
3jZu1aOnnltMNussdfXbm+l3ZM9URHREdZVXTuT1Nk7boQiOkJw28PU47/htEp5eivJPLMTCZ9Vv
|
|
x7mJ3iJ9UqNHk8XR4b+tIXuhxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD
|
|
weqjbWZ4/wCZP8vePCaz/wDIaiP+Zb+UX408f0r9lOxWOifJhXWjfyYWllPRXYQxnrCrJHRd3YZI
|
|
6A1NJecHEsN/S0T+76bE7xE+r5dk93LW3pL6ZpMni6PDf8VIn9m2fjm8s9rgFmQxvHNS0esbMiew
|
|
PnHLyai9fS0w2aNfUTtrs3+uf5bGPqy068fF227KtSsdFlKqNGMV6myyY6sbdIQI8tlOWOi6Jhhk
|
|
j3RD0vA8nicMx9etZmHRcT2Zyb6XNT8N9/2dt0T449T2AJVAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAHhdfG3E9TH9cvdPEcXjk4zqI/q3L8aeP6xr2TsxpLOekMK6mFo6qpXSrm
|
|
OqBixvHSVmzC4OfqK7S9/wAByeLwbTW9K7fo8Fqo6Paeyl+fglI/Da0NcMPK7QC7AAB8313TiOf/
|
|
AKk/y2MHWrX4jG3E9R/1Lfyv0/aFNOrHxuU7LI7MMayGTVlHWUXhNe6Z6wIUsb9d1m20q7dkDpez
|
|
N9tRqKT5xEvRvKez9+Xis1/FSYerb5+OTyf6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAB43j9eXjN/jWJ/Z7J5L2mry8Upb8VIF8f6aGOey2eynHvOy7bowrrYSxZSwQJ2YXZ
|
|
92N4BoanrEvVexmTm4blr+HJ/aHltRHSXofYm/1Wrp5RaJaYY+X49WA0c4AD51xONuKan/qW/lbp
|
|
+0MOLRtxbU/9SU4J7KadWPjep2WQrr2WRPRk1TvsndXMpiRCb9FNu0rbTuqvKBscCjfi9PhWZeue
|
|
V9n434rafTHL1TfPxy+T/QAszAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHmv
|
|
avHtfTZfnV6VxPajHzcNrf8ABeJFs/XnMcr4no18c+6vr2YadkY2YM57sEDLyY37Mo7MMnYGlqO0
|
|
vQ+xNfqNVb1tEfs87qZ2rL0/sVX/AHdnt65P7Q0wx8vx6UBo5wAHz/jUbcX1PT78qtO2vaCnJxjP
|
|
8Zif2amnnspp04+OjWejKJ6MKdmcMmyJn4m5ZHzEVPMwtJv0VZLbQDqezcb8RzT6Y/7vUPM+ytZt
|
|
n1OTyiIh6Ztn45N/6AFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABocbxeLw
|
|
nUR5xXm/Rvq8+OMuDJjntaswEeBxT0bNZ6NatZpNqz3rO0rqsdO3PxlaWEMpY+aqWXkryT0ZT2V3
|
|
7A0dVPuy9f7G124NM/iyT/Z4zWT7sw957MYfB4Fp4/FE2/WWmGHldcBowAAeM9qKcvFeb8VIly9P
|
|
0nq7ntbTbVYL+tJj93CwT76unR4/jo0nozhhTsy3Y1sWljM9Ce7HyQIm3RRlttVbaWrnt0Sh6n2U
|
|
x8vD8mSfv3/h3XN4Bi8Lg2nj8Uc36y6TeOPXugCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAPD8RxeBxXUU26Tbmj8+quro+02Lw+I4ssdslNvzhzazvDPbq8d7GW7Dfqz2VzG
|
|
0s2qd+iu/Zn5Ksk9BVztX1mI8930zh2LwOHabH+HHWP2fNYp4+vwYvxXiP3fUqxtWIjyjZtj45/L
|
|
faQFmQADzftfj3w6fJ6WmHmsP23rvaqnNwqLfhvEvIYZ+sV038bo0noy36MK9oZQxrdMyrlnMbMZ
|
|
QKrS1M07zEestq/RRjr4utwY/wAV4j91p9V18fQdJj8LR4ccfdpEfsuREbREJbuMAAAAAAAAAAAA
|
|
BAJAAAAEAJEAJQAJQAJEAJQAJQAJEACUJAQlAJEAJQAJQJAAAEAJEAJBAAAJAABAJEJAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwvanDzaPFmjvjv8A
|
|
tLztJ3h7HjGHx+FainnFeaPnHV4vFbeIU038VbHeGF+kso7Mb9mTdhKnLK3dRm7SIrHhGPxeP6Sv
|
|
9cT/AHfSnz72Zx+J7Q45/BWZ/Z9BbZ+OXyfQBZQABzeP4/E4NqI9Ii36S8Ng/wAx9C4jTxOH6ivr
|
|
jn+Hz3B/mQi/GvjdCnWNlsdI2V07LIlg6USrt2ZzZXMoFV+zPhGLxeOaavpbm/RVltEN72Yx+Jxm
|
|
b7dKUmf7L5+s9/HtRA2cqRACRACRACRACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQCQQCRACRACRCQBCQBCQB
|
|
ACRACRACRACRACL1i9LVntMbPATTwdRkxT3pea/u+gPE8Xx+DxrPHlaYt+qNfGvjvtXXsi0dOrKk
|
|
dEXjZg6VMtbP2bMtXUdpEV0/Y2nNxbNf8OP+727xvsXH+N1U/wBEfy9k3nxyb+gCVQAGOWvNivX1
|
|
rMPnGGOXNNfOJ2fSZ6w+dZKeHxDPX8N7R+6L8a+L63KdoZ7q6zvEMpnowdKJ6ywmWUyqvIKM0vQ+
|
|
x+D6rU55+9aKx+TzWa36vbezmDwODYenW+95/Nphj5L6dQBo5wAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAEiAAAEoA
|
|
AAAAAAAAAAAAAEAkEAkRuAkQbgkQAkQAkQAkQAl5T2nx8nEMOT8dNv0l6pwfarHvpcGWPu32/WCr
|
|
YvK4mOem6b9mGKd4Z3idmFdka0y1c892zfpMtLPaNpEV6D2Kj/Eauf6YeweQ9ieuTVz8K/3evbT4
|
|
5NfQBKoAA8FxCvJxrUx/XMvevD8Zry8fz/Haf2RfjTx/6RSOnRMyypHu9kXjowrqVSrvPRnZVl6V
|
|
kK0775MsUjvadn0nT4ow6bFijtSsVfPuFYvpPGtNTy54mfy6vorXDm8l9pEC7JIgBIgBIgBIgBIg
|
|
BIgBIhIAgBIhIAgBIgBIIBIAAhIAhIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAA
|
|
AAAAAAAAABAJQkAEAAAAAAAAAAjc3BIjdG4Mkbo5kcwMjdhzHMDPc3V8xzAs3N1fMjmBZubq+Y5g
|
|
Wbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmOYFm5ur5jmBZubq+Y5gWbm6vmTzAz3N2HMnmBlu5ftFTx
|
|
OEZJ/DMW/d0t2rxKni8N1FPWkiZ9eS08e7Cy8dGGn6UhZaJljXZGnmc3UT3dPP2cnUT78xCIV6j2
|
|
H/8A9c/6f7vXPI+w8bU1U+vL/d63du5NfUiDcVSIAS8b7RV5eOb/AIqRL2TyXtNX/e2KfXH/AHlF
|
|
+NPH/pr4+2xcxx0hFpY11K7R16KM32ZWz3UaidqSgrc9kcPicWyZJjfw6T+727y3sXh2xarN+K0V
|
|
h6lvPjj3e0ASqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAAAkQAkQAkAAAAAAAAAAAAAAA
|
|
EgAAAAAAAAAAAAAAAAAAAAAgAAABKDcAN0bgkY8xzAyRux5kcwM9zdXNkTcFm6OZXzMeYFvMibKu
|
|
ZHMC2bo51U2RuC2bom6rc3BZzom6sBZzI52ADPnOdggFnMc6skFnMc6rc3BbznOp3RzAv50c6nml
|
|
HMC/nOf4qOY5wX85zqOc5wbHOc7X5znBsc6edr85zg2ec52vzpi4NjmY5bROG+/bllVzsNTk5dLl
|
|
n0pP8BHmMHWNmzt0aum8obm08vVjfrtnxztR0mXHzTvaZdjVRMTLkZo6yiFen9iZ2pqY/wBP93rN
|
|
3kPY+/LfPX1rE/u9XzN3HfqzdO6vmTuIZ7m7Hc3Bnu8t7TR/vHBP9E/y9Pu837SV31umn+if5Rfi
|
|
/j/01MMb1hjkrtKzBG0bMsmOZY11tOYamr6Und0LUc7XT7u3rJPqL8er9lcPhcFpbzyWm39v7O00
|
|
+FYvA4Zpsc94xxu227jv1IAgAAAAAAAAABKAAAASgASgBIgBIgBIgBIhIAAAAAAAAAAAAAAAAAAC
|
|
UACUJAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAg3AEbomQZbo3YzLGbAz3RNlc3YzcFs2YzdVN2
|
|
M2Bdzom6nmNwW86JurTAMuY3REJ2BB1ZRVMVBhsbSsiqeUFXLucq3lTygp5TlXcpygp5TlXcpygp
|
|
5TlXcqOUFXKjlXcrGYBXysdlswiYBVMdUTCyY6sZBWxlnMMZgGLGZZSwkDdHMiWO4MuY5mEyjcFn
|
|
N1OdVzHMC3nTzqeY5gX85zqOZPMC+Lqdbk20eb/RKOZr8QybaK/XvtH7iZ9aGlp2luzT3fg19NHS
|
|
OjbmPcYX67XH1XSZ9XIzRvMuzrK7zLkZYmYnciunb9lZ5dTk+OP+71cXeP8AZnJ/ip2nf3J/l6iL
|
|
/Fu5L9bMWZczXi6YuIbEWTzKIuyiwLt3nuO25uI4a/hx7/rLuczg8TicvFLbfdpEK6+NPH/phhjo
|
|
stLGkctUWnoxrrU3j1cnWTzZq1jzl1clo5Zcu8c+txR63iP3Tn6pv4+g4o5cVI9IiGe7CJ2iE7t3
|
|
GyN2O6dwSINwSISAlAAlACRAAlAAlACRACRCQAAAAAAAAAASgASISAAAAAAAAAAAAACQAAAAAAAA
|
|
AAAAAASAAAAAAAAAAAAAAAAIAAAQCAJljuljsCJlhMs9mOwMJYys5TkBVsjZdyHICrZPKt5E8oK4
|
|
qmKrOVOwMIqyirPY2Bjyp2ZbAI2NmSARsbMgEbI2ZAMdjZICNkbMkSCNmOzJEgx2YyzljMAwlhKy
|
|
WEwCuWErJhhMArlhLOWEgxljMpljIImWMyTKJA3N0IBO5vux3NwZbnMx3NwZczT4jf3MdPW27a3a
|
|
fJOq1XNP2KdIRfi+J2trSYfcjeF+Wm1OicVeWIiN9kai8xjY12ORqultnI1Ecsujq79XP1FovWYI
|
|
rTgeq+j8QrWZ+3Mx+r2UXeC0WG2Ti2kiN5mL807eUREvbzbaejefHJv62Iv8WUXa0WTFhVtRdlF2
|
|
rz9WUXBtc7jR9dqc2T1ttHyhvZMvJitb0jdq6XHNcNenWVN3028U99WRj6Kb02be3Tq18/SN2Lpc
|
|
3UdN9nOmZrqKX/DaJ/d0svvTLRzV3jomK6+Pd1vvWJj0ZczT0mXxNJht60hfFnQ4qu3N1cWTEgs3
|
|
Tur5k7gz3N2O5uDM3Y7m4MtxBuCQASIASIASAAAAAAACRCQAAAAAAAAEoSAAAAAAAAAAAlAAlCQA
|
|
AAAAAAAAAAASAAAAAAAAAAAAIASgAAAEJAQJQCNkbMgGOyOVnsAw5TlZ7GwMOVPKy2NgY7GzIBGx
|
|
skA2AAAAAAAAAAQkBAEghEskAxYzDPZGwK5hjMLJhjMAqmGEwumrCagomFcw2JqqtUFEsLLrV82F
|
|
o7gqljKyYYTGwMZRKUSCAQAboJnaN5Bjkneu0d5W4ccViIiOzHFWbTzNumP1Zarr8eeRMbxDW1Mx
|
|
NO67NbkhzNVnmInqzaOZrL93JyZeV0M1++7S02jvxDWxhxx033tPpC8Z6rrezWjmZyazJG2/u03h
|
|
2vFibTHoqvamiwVwY+nLGzV0+SZ1Mx8G0/45tOhzJ5lXMc3UVXRdlF1HP+iYsDPLPPy49/tz1+Te
|
|
pSIr0ho6ak5Ms5J8o2q6NImOrHV7XX488ypzTtHXo0s9t6zG7c1G1qz6ubeZiZ3UatXJG3yauSO7
|
|
cvMTEx5tPLb3prPRMVr0HB8vicNxf0+7+kt+LOJwTJyY/Bnz3tH93X36N58cWvq6LSyiyndMSlC7
|
|
mZcymLJiwLosmJVRLKLAtiU7q4lMSCzc3YxJuDMRuAlKAEgAAAlAkAAAAAABKAEgAAAAAJAAAAAA
|
|
AAAAAAAEgAAAAAAAAAAAAAkAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAhIAAACAAAASgAAAAAAEAAAA
|
|
hGzJAImGMwzQDDZjNVuyNgUTVhNGxysZqDVmiu1G5NN2M4waM0+DCaN2cbGcQNGaMZq3JxMJxA1J
|
|
qx2bU4kU09slorWNwa20z02RXHbJbl26QvtFovbHWkxEdJt5y2MOHlr2U1W3jx+1hiw8vSO63lmI
|
|
XRTaEWmtY6snRHO1VpmJ+DjavpSZl2s8b7y4HFcnh0n0gha5ebJN55KRM2mdoiPN6fh+kpwXh0Wy
|
|
RHj5Otp/s5Ps1p62y31+em9aTMYt/OfVfxTiPjZ52naI7fBrI5t66xz5+a1rW7yx0eSL6iZjtEOX
|
|
qNbSletom3lENjh2fbHzbbWt3iVozruc+5ztWubf4M4ybpQ2Oboyrva0Vjza8WdDR4OkXt3n9ldX
|
|
kaePP9VtYqctYhdvt5oivTeCZ2YOxXk6ubqMfV0b9mrljfqlFcq88k7z2U5axeItDa1OPessuC8P
|
|
ya7XRWYnwqdbT/ZMilvIu4dpslNdixXja8Y5tt85djZdbDWnGOesRtXFtuw6T27No5Kx2OrKYQlC
|
|
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
|
|
2Q==`,Z6={};Ir(Z6,{author:()=>av,browser:()=>nv,bugs:()=>sv,default:()=>qae,dependencies:()=>cv,description:()=>Y6,devDependencies:()=>dv,engines:()=>lv,homepage:()=>iv,keywords:()=>fv,license:()=>ov,main:()=>ev,module:()=>tv,name:()=>J6,peerDependencies:()=>hv,repository:()=>uv,scripts:()=>pv,sideEffects:()=>Q6,types:()=>rv,version:()=>I2});var J6="@vladmandic/human",I2="0.20.3",Y6="Human: AI-powered 3D Face Detection, Face Embedding & Recognition, Body Pose Tracking, Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction & Gesture Recognition",Q6=!1,ev="dist/human.node.js",tv="dist/human.esm.js",nv="dist/human.esm.js",rv="types/human.d.ts",av="Vladimir Mandic <mandic00@live.com>",sv={url:"https://github.com/vladmandic/human/issues"},iv="https://github.com/vladmandic/human#readme",ov="MIT",lv={node:">=12.0.0"},uv={type:"git",url:"git+https://github.com/vladmandic/human.git"},cv={},hv={},dv={"@tensorflow/tfjs":"^3.1.0","@tensorflow/tfjs-backend-cpu":"^3.1.0","@tensorflow/tfjs-backend-wasm":"^3.1.0","@tensorflow/tfjs-backend-webgl":"^3.1.0","@tensorflow/tfjs-converter":"^3.1.0","@tensorflow/tfjs-core":"^3.1.0","@tensorflow/tfjs-data":"^3.1.0","@tensorflow/tfjs-layers":"^3.1.0","@tensorflow/tfjs-node":"^3.1.0","@tensorflow/tfjs-node-gpu":"^3.1.0","@types/node":"^14.14.30","@typescript-eslint/eslint-plugin":"^4.15.1","@typescript-eslint/parser":"^4.15.1","@vladmandic/pilogger":"^0.2.14",chokidar:"^3.5.1",dayjs:"^1.10.4",esbuild:"^0.8.49",eslint:"^7.20.0","eslint-config-airbnb-base":"^14.2.1","eslint-plugin-import":"^2.22.1","eslint-plugin-json":"^2.1.2","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.3.1",rimraf:"^3.0.2",seedrandom:"^3.0.5","simple-git":"^2.35.1",tslib:"^2.1.0",typescript:"^4.3.0-dev.20210219"},pv={start:"node --trace-warnings --unhandled-rejections=strict --trace-uncaught --no-deprecation src/node.js",lint:"eslint src demo server",dev:"npm install && node server/serve.js",build:"rimraf dist/* && rimraf types/* && node server/build.js && node server/changelog.js",update:"npm update --depth 20 --force && npm dedupe && npm prune && npm audit"},fv=["tensorflowjs","face-detection","face-geometry","face-embedding","face-recognition","body-tracking","hand-tracking","iris-tracking","age-estimation","emotion-detection","gender-prediction","gesture-recognition"],qae={name:J6,version:I2,description:Y6,sideEffects:Q6,main:ev,module:tv,browser:nv,types:rv,author:av,bugs:sv,homepage:iv,license:ov,engines:lv,repository:uv,dependencies:cv,peerDependencies:hv,devDependencies:dv,scripts:pv,keywords:fv},ft=()=>typeof performance!="undefined"?performance.now():parseInt((Number(process.hrtime.bigint())/1e3/1e3).toString());function zl(...e){let t=n=>n&&typeof n=="object";return e.reduce((n,r)=>(Object.keys(r||{}).forEach(a=>{let s=n[a],i=r[a];Array.isArray(s)&&Array.isArray(i)?n[a]=s.concat(...i):t(s)&&t(i)?n[a]=zl(s,i):n[a]=i}),n),{})}var mv=class{constructor(e={}){this.tf=z2,this.package=Z6,this.version=I2,this.config=zl(Gae,e),this.fx=null,this.state="idle",this.numTensors=0,this.analyzeMemoryLeaks=!1,this.checkSanity=!1,this.firstRun=!0,this.perf={},this.models={facemesh:null,posenet:null,handpose:null,iris:null,age:null,gender:null,emotion:null},this.facemesh=w6,this.age=k6,this.gender=I6,this.emotion=N6,this.body=C6,this.hand=B6}profile(){return this.config.profile?v6:{}}analyze(...e){if(!this.analyzeMemoryLeaks)return;let t=this.tf.engine().state.numTensors,n=this.numTensors;this.numTensors=t;let r=t-n;r!==0&&Ue(...e,r)}sanity(e){if(!this.checkSanity)return null;if(!e)return"input is not defined";if(this.tf.ENV.flags.IS_NODE&&!(e instanceof this.tf.Tensor))return"input must be a tensor";try{this.tf.getBackend()}catch(t){return"backend not loaded"}return null}simmilarity(e,t){return this.config.face.embedding.enabled?tae(e,t):0}async load(e=null){this.state="load";let t=ft();e&&(this.config=zl(this.config,e)),this.firstRun&&(Ue(`version: ${this.version} TensorFlow/JS version: ${this.tf.version_core}`),await this.checkBackend(!0),this.tf.ENV.flags.IS_BROWSER&&(Ue("configuration:",this.config),Ue("tf flags:",this.tf.ENV.flags)));let n=this.config.face.detector.modelPath.includes("faceboxes")?_6:w6;this.config.async?[this.models.face,this.models.age,this.models.gender,this.models.emotion,this.models.embedding,this.models.posenet,this.models.handpose]=await Promise.all([this.models.face||(this.config.face.enabled?n.load(this.config):null),this.models.age||(this.config.face.enabled&&this.config.face.age.enabled?n2(this.config):null),this.models.gender||(this.config.face.enabled&&this.config.face.gender.enabled?a2(this.config):null),this.models.emotion||(this.config.face.enabled&&this.config.face.emotion.enabled?u2(this.config):null),this.models.embedding||(this.config.face.enabled&&this.config.face.embedding.enabled?T6(this.config):null),this.models.posenet||(this.config.body.enabled?p2(this.config):null),this.models.handpose||(this.config.hand.enabled?g2(this.config):null)]):(this.config.face.enabled&&!this.models.face&&(this.models.face=await n.load(this.config)),this.config.face.enabled&&this.config.face.age.enabled&&!this.models.age&&(this.models.age=await n2(this.config)),this.config.face.enabled&&this.config.face.gender.enabled&&!this.models.gender&&(this.models.gender=await a2(this.config)),this.config.face.enabled&&this.config.face.emotion.enabled&&!this.models.emotion&&(this.models.emotion=await u2(this.config)),this.config.face.enabled&&this.config.face.embedding.enabled&&!this.models.embedding&&(this.models.embedding=await T6(this.config)),this.config.body.enabled&&!this.models.posenet&&(this.models.posenet=await p2(this.config)),this.config.hand.enabled&&!this.models.handpose&&(this.models.handpose=await g2(this.config))),this.firstRun&&(Ue("tf engine state:",this.tf.engine().state.numBytes,"bytes",this.tf.engine().state.numTensors,"tensors"),this.firstRun=!1);let r=Math.trunc(ft()-t);r>(this.perf.load||0)&&(this.perf.load=r)}async checkBackend(e=!1){if(this.config.backend&&this.config.backend!==""&&e||this.tf.getBackend()!==this.config.backend){let t=ft();this.state="backend",Ue("setting backend:",this.config.backend),this.config.backend==="wasm"&&(Ue("settings wasm path:",this.config.wasmPath),this.tf.setWasmPaths(this.config.wasmPath),await this.tf.env().getAsync("WASM_HAS_SIMD_SUPPORT")||Ue("warning: wasm simd support is not enabled")),this.config.backend==="humangl"&&Cre();try{await this.tf.setBackend(this.config.backend)}catch(n){Ue("error: cannot set backend:",this.config.backend,n)}if(this.tf.enableProdMode(),this.tf.getBackend()==="webgl"){this.config.deallocate&&(Ue("changing webgl: WEBGL_DELETE_TEXTURE_THRESHOLD:",this.config.deallocate),this.tf.ENV.set("WEBGL_DELETE_TEXTURE_THRESHOLD",this.config.deallocate?0:-1)),this.tf.ENV.set("WEBGL_FORCE_F16_TEXTURES",!0),this.tf.ENV.set("WEBGL_PACK_DEPTHWISECONV",!0);let n=await this.tf.backend().getGPGPUContext().gl;Ue(`gl version:${n.getParameter(n.VERSION)} renderer:${n.getParameter(n.RENDERER)}`)}await this.tf.ready(),this.perf.backend=Math.trunc(ft()-t)}}async detectFace(e){var t,n,r,a,s,i;let o,l,c,u,h,d=[];this.state="run:face",o=ft();let p=await((t=this.models.face)==null?void 0:t.estimateFaces(e,this.config));this.perf.face=Math.trunc(ft()-o);for(let f of p){if(this.analyze("Get Face"),!f.image||f.image.isDisposedInternal){Ue("Face object is disposed:",f.image);continue}this.analyze("Start Age:"),this.config.async?l=this.config.face.age.enabled?r2(f.image,this.config):{}:(this.state="run:age",o=ft(),l=this.config.face.age.enabled?await r2(f.image,this.config):{},this.perf.age=Math.trunc(ft()-o)),this.analyze("Start Gender:"),this.config.async?c=this.config.face.gender.enabled?s2(f.image,this.config):{}:(this.state="run:gender",o=ft(),c=this.config.face.gender.enabled?await s2(f.image,this.config):{},this.perf.gender=Math.trunc(ft()-o)),this.analyze("Start Emotion:"),this.config.async?u=this.config.face.emotion.enabled?c2(f.image,this.config):{}:(this.state="run:emotion",o=ft(),u=this.config.face.emotion.enabled?await c2(f.image,this.config):{},this.perf.emotion=Math.trunc(ft()-o)),this.analyze("End Emotion:"),this.analyze("Start Embedding:"),this.config.async?h=this.config.face.embedding.enabled?E6(f.image,this.config):{}:(this.state="run:embedding",o=ft(),h=this.config.face.embedding.enabled?await E6(f.image,this.config):{},this.perf.embedding=Math.trunc(ft()-o)),this.analyze("End Emotion:"),this.config.async&&([l,c,u,h]=await Promise.all([l,c,u,h])),this.analyze("Finish Face:"),!this.config.face.iris.enabled&&((n=f==null?void 0:f.annotations)==null?void 0:n.leftEyeIris)&&((r=f==null?void 0:f.annotations)==null?void 0:r.rightEyeIris)&&(delete f.annotations.leftEyeIris,delete f.annotations.rightEyeIris);let m=((a=f.annotations)==null?void 0:a.leftEyeIris)&&((s=f.annotations)==null?void 0:s.rightEyeIris)?11.7*Math.max(Math.abs(f.annotations.leftEyeIris[3][0]-f.annotations.leftEyeIris[1][0]),Math.abs(f.annotations.rightEyeIris[4][1]-f.annotations.rightEyeIris[2][1])):0;d.push({confidence:f.confidence,box:f.box,mesh:f.mesh,boxRaw:f.boxRaw,meshRaw:f.meshRaw,annotations:f.annotations,age:l.age,gender:c.gender,genderConfidence:c.confidence,emotion:u,embedding:h,iris:m!==0?Math.trunc(m)/100:0}),(i=f.image)==null||i.dispose(),this.analyze("End Face")}return this.analyze("End FaceMesh:"),this.config.async&&(this.perf.face&&delete this.perf.face,this.perf.age&&delete this.perf.age,this.perf.gender&&delete this.perf.gender,this.perf.emotion&&delete this.perf.emotion),d}async image(e,t={}){var n;this.state="image",this.config=zl(this.config,t);let r=K6(e,this.config);return(n=r==null?void 0:r.tensor)==null||n.dispose(),r==null?void 0:r.canvas}async detect(e,t={}){return new Promise(async n=>{var r,a,s,i;this.state="config";let o;this.config=zl(this.config,t),this.state="check";let l=this.sanity(e);l&&(Ue(l,e),n({error:l}));let c,u,h,d=ft();await this.checkBackend(),await this.load(),this.config.scoped&&this.tf.engine().startScope(),this.analyze("Start Scope:"),o=ft();let p=K6(e,this.config);if(!p||!p.tensor){Ue("could not convert input to tensor"),n({error:"could not convert input to tensor"});return}this.perf.image=Math.trunc(ft()-o),this.analyze("Get Image:"),this.config.async?(h=this.config.face.enabled?this.detectFace(p.tensor):[],this.perf.face&&delete this.perf.face):(this.state="run:face",o=ft(),h=this.config.face.enabled?await this.detectFace(p.tensor):[],this.perf.face=Math.trunc(ft()-o)),this.analyze("Start Body:"),this.config.async?(c=this.config.body.enabled?(r=this.models.posenet)==null?void 0:r.estimatePoses(p.tensor,this.config):[],this.perf.body&&delete this.perf.body):(this.state="run:body",o=ft(),c=this.config.body.enabled?await((a=this.models.posenet)==null?void 0:a.estimatePoses(p.tensor,this.config)):[],this.perf.body=Math.trunc(ft()-o)),this.analyze("End Body:"),this.analyze("Start Hand:"),this.config.async?(u=this.config.hand.enabled?(s=this.models.handpose)==null?void 0:s.estimateHands(p.tensor,this.config):[],this.perf.hand&&delete this.perf.hand):(this.state="run:hand",o=ft(),u=this.config.hand.enabled?await((i=this.models.handpose)==null?void 0:i.estimateHands(p.tensor,this.config)):[],this.perf.hand=Math.trunc(ft()-o)),this.analyze("End Hand:"),this.config.async&&([h,c,u]=await Promise.all([h,c,u])),p.tensor.dispose(),this.config.scoped&&this.tf.engine().endScope(),this.analyze("End Scope:");let f=[];this.config.gesture.enabled&&(o=ft(),f=[...Bae(h),...Wae(c),...Uae(u),...Vae(h)],this.config.async?this.perf.gesture&&delete this.perf.gesture:this.perf.gesture=Math.trunc(ft()-o)),this.perf.total=Math.trunc(ft()-d),this.state="idle",n({face:h,body:c,hand:u,gesture:f,performance:this.perf,canvas:p.canvas})})}async warmupBitmap(){let e=(r,a="application/octet-stream")=>fetch(`data:${a};base64,${r}`).then(s=>s.blob()),t,n;switch(this.config.warmup){case"face":t=await e(v2);break;case"full":t=await e(k2);break;default:t=null}if(t){let r=await createImageBitmap(t);n=await this.detect(r,this.config),r.close()}return n}async warmupCanvas(){return new Promise(e=>{let t,n=0;switch(this.config.warmup){case"face":n=256,t="data:image/jpeg;base64,"+v2;break;case"full":n=1200,t="data:image/jpeg;base64,"+k2;break;default:t=null}let r=new Image(n,n);r.onload=()=>{let a=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(n,n):document.createElement("canvas");a.width=n,a.height=n;let s=a.getContext("2d");s==null||s.drawImage(r,0,0);let i=s==null?void 0:s.getImageData(0,0,n,n);this.detect(i,this.config).then(o=>e(o))},t?r.src=t:e(null)})}async warmupNode(){let e=s=>Buffer.from(s,"base64"),t=this.config.warmup==="face"?e(v2):e(k2),n=(void 0).decodeJpeg(t),r=n.expandDims(0);this.tf.dispose(n);let a=await this.detect(r,this.config);return this.tf.dispose(r),a}async warmup(e){let t=ft();e&&(this.config=zl(this.config,e));let n=this.config.videoOptimized;this.config.videoOptimized=!1;let r;typeof createImageBitmap=="function"?r=await this.warmupBitmap():typeof Image!="undefined"?r=await this.warmupCanvas():r=await this.warmupNode(),this.config.videoOptimized=n;let a=ft();return Ue("Warmup",this.config.warmup,Math.round(a-t),"ms",r),r}};async function Xae(e,t,n){if(!e)return;let r=t.getContext("2d");r.font=n.baseFont,r.fillStyle=n.baseLabel;let a=1;for(let s=0;s<e.length;s++){let[i,o]=Object.entries(e[s]);if(o.length>1&&o[1].length>0){let l=i[1]>0?`#${i[1]}`:"",c=`${i[0]} ${l}: ${o[1]}`;r.fillStyle="black",r.fillText(c,8,2+a*n.baseLineHeight),r.fillStyle=n.baseLabel,r.fillText(c,6,0+a*n.baseLineHeight),a+=1}}}async function Kae(e,t,n,r){if(!e)return;let a=t.getContext("2d");for(let s of e){a.font=n.baseFont,a.strokeStyle=n.baseColor,a.fillStyle=n.baseColor,a.lineWidth=n.baseLineWidth,a.beginPath(),n.drawBoxes&&a.rect(s.box[0],s.box[1],s.box[2],s.box[3]);let i=[];if(s.genderConfidence&&i.push(`${s.gender||""} ${Math.trunc(100*s.genderConfidence)}% confident`),s.age&&i.push(`age: ${s.age||""}`),s.iris&&i.push(`iris distance: ${s.iris}`),s.emotion&&s.emotion.length>0){let o=s.emotion.map(l=>`${Math.trunc(100*l.score)}% ${l.emotion}`);i.push(o.join(" "))}i.length===0&&i.push("face"),a.fillStyle=n.baseLabel;for(let o=0;o<i.length;o++)a.fillStyle="black",a.fillText(i[o],s.box[0]+1,s.box[1]-(i.length-o)*n.baseLineHeight+6),a.fillStyle=n.baseLabel,a.fillText(i[o],s.box[0]+0,s.box[1]-(i.length-o)*n.baseLineHeight+5);if(a.fillStyle=n.baseColor,a.stroke(),a.lineWidth=1,s.mesh){if(n.drawPoints)for(let o of s.mesh)a.fillStyle=n.useDepth?`rgba(${127.5+2*o[2]}, ${127.5-2*o[2]}, 255, 0.5)`:n.baseColor,a.beginPath(),a.arc(o[0],o[1],2,0,2*Math.PI),a.fill();if(n.drawPolygons){for(let o=0;o<r.length/3;o++){let l=[r[o*3+0],r[o*3+1],r[o*3+2]].map(u=>s.mesh[u]),c=new Path2D;c.moveTo(l[0][0],l[0][1]);for(let u of l)c.lineTo(u[0],u[1]);c.closePath(),a.strokeStyle=n.useDepth?`rgba(${127.5+2*l[0][2]}, ${127.5-2*l[0][2]}, 255, 0.3)`:n.baseColor,a.stroke(c),n.fillPolygons&&(a.fillStyle=n.useDepth?`rgba(${127.5+2*l[0][2]}, ${127.5-2*l[0][2]}, 255, 0.3)`:n.baseColor,a.fill(c))}if(s.annotations&&s.annotations.leftEyeIris){a.strokeStyle=n.useDepth?"rgba(255, 200, 255, 0.3)":n.baseColor,a.beginPath();let o=Math.abs(s.annotations.leftEyeIris[3][0]-s.annotations.leftEyeIris[1][0])/2,l=Math.abs(s.annotations.leftEyeIris[4][1]-s.annotations.leftEyeIris[2][1])/2;a.ellipse(s.annotations.leftEyeIris[0][0],s.annotations.leftEyeIris[0][1],o,l,0,0,2*Math.PI),a.stroke(),n.fillPolygons&&(a.fillStyle=n.useDepth?"rgba(255, 255, 200, 0.3)":n.baseColor,a.fill())}if(s.annotations&&s.annotations.rightEyeIris){a.strokeStyle=n.useDepth?"rgba(255, 200, 255, 0.3)":n.baseColor,a.beginPath();let o=Math.abs(s.annotations.rightEyeIris[3][0]-s.annotations.rightEyeIris[1][0])/2,l=Math.abs(s.annotations.rightEyeIris[4][1]-s.annotations.rightEyeIris[2][1])/2;a.ellipse(s.annotations.rightEyeIris[0][0],s.annotations.rightEyeIris[0][1],o,l,0,0,2*Math.PI),a.stroke(),n.fillPolygons&&(a.fillStyle=n.useDepth?"rgba(255, 255, 200, 0.3)":n.baseColor,a.fill())}}}}}var Ba=[];async function Zae(e,t,n){if(!e)return;let r=t.getContext("2d");r.lineJoin="round";for(let a=0;a<e.length;a++){if(!Ba[a]&&n.buffered&&(Ba[a]={...e[a]}),r.fillStyle=n.baseColor,r.strokeStyle=n.baseColor,r.font=n.baseFont,r.lineWidth=n.baseLineWidth,n.drawPoints)for(let s=0;s<e[a].keypoints.length;s++)r.beginPath(),n.buffered?(Ba[a].keypoints[s].position.x=(Ba[a].keypoints[s].position.x+e[a].keypoints[s].position.x)/2,Ba[a].keypoints[s].position.y=(Ba[a].keypoints[s].position.y+e[a].keypoints[s].position.y)/2,r.arc(Ba[a].keypoints[s].position.x,Ba[a].keypoints[s].position.y,2,0,2*Math.PI)):r.arc(e[a].keypoints[s].position.x,e[a].keypoints[s].position.y,2,0,2*Math.PI),r.fill();if(n.drawPolygons){let s=new Path2D,i,o;i=e[a].keypoints.find(l=>l.part==="leftShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightShoulder"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightHip"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftHip"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftShoulder"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="leftHip"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="leftKnee"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftAnkle"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="rightHip"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightKnee"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightAnkle"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="leftShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="leftElbow"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="leftWrist"),o&&s.lineTo(o.position.x,o.position.y)),i=e[a].keypoints.find(l=>l.part==="rightShoulder"),i&&(s.moveTo(i.position.x,i.position.y),o=e[a].keypoints.find(l=>l.part==="rightElbow"),o&&s.lineTo(o.position.x,o.position.y),o=e[a].keypoints.find(l=>l.part==="rightWrist"),o&&s.lineTo(o.position.x,o.position.y)),r.stroke(s)}}}async function Jae(e,t,n){if(!e)return;let r=t.getContext("2d");r.lineJoin="round";for(let a of e){if(r.font=n.baseFont,r.lineWidth=n.baseLineWidth,n.drawBoxes&&(r.lineWidth=n.baseLineWidth,r.beginPath(),r.strokeStyle=n.baseColor,r.fillStyle=n.baseColor,r.rect(a.box[0],a.box[1],a.box[2],a.box[3]),r.fillStyle="black",r.fillText("hand",a.box[0]+3,1+a.box[1]+n.baseLineHeight,a.box[2]),r.fillStyle=n.baseLabel,r.fillText("hand",a.box[0]+2,0+a.box[1]+n.baseLineHeight,a.box[2]),r.stroke()),n.drawPoints&&a.landmarks&&a.landmarks.length>0)for(let s of a.landmarks)r.fillStyle=n.useDepth?`rgba(${127.5+2*s[2]}, ${127.5-2*s[2]}, 255, 0.5)`:n.baseColor,r.beginPath(),r.arc(s[0],s[1],2,0,2*Math.PI),r.fill();if(n.drawPolygons){let s=i=>{if(!!i)for(let o=0;o<i.length;o++)r.lineWidth=n.baseLineWidth,r.beginPath(),r.strokeStyle=n.useDepth?`rgba(${127.5+2*i[o][2]}, ${127.5-2*i[o][2]}, 255, 0.5)`:n.baseColor,r.moveTo(i[o>0?o-1:0][0],i[o>0?o-1:0][1]),r.lineTo(i[o][0],i[o][1]),r.stroke()};s(a.annotations.indexFinger),s(a.annotations.middleFinger),s(a.annotations.ringFinger),s(a.annotations.pinky),s(a.annotations.thumb)}}}var Wc={face:Kae,body:Zae,hand:Jae,gesture:Xae};var Bc=0,Av=!1,wt={background:"darkslategray",hover:"lightgray",itemBackground:"black",itemColor:"white",buttonBackground:"lightblue",buttonHover:"lightgreen",checkboxOn:"lightgreen",checkboxOff:"lightcoral",rangeBackground:"lightblue",rangeLabel:"white",chartColor:"lightblue"};function Yae(){if(Av)return;let e=`
|
|
:root { --rounded: 0.2rem; }
|
|
.menu { position: absolute; top: 0rem; right: 0; width: max-content; padding: 0 0.2rem 0 0.2rem; line-height: 1.8rem; z-index: 10;
|
|
box-shadow: 0 0 8px dimgrey; background: ${wt.background}; border-radius: var(--rounded); border-color: black; border-style: solid; border-width: thin; }
|
|
|
|
.menu:hover { box-shadow: 0 0 8px ${wt.hover}; }
|
|
.menu-container { display: block; max-height: 100vh; }
|
|
.menu-container-fadeout { max-height: 0; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-container-fadein { max-height: 100vh; overflow: hidden; transition: max-height, 0.5s ease; }
|
|
.menu-item { display: flex; white-space: nowrap; padding: 0.2rem; cursor: default; width: 100%; }
|
|
.menu-title { cursor: pointer; }
|
|
.menu-hr { margin: 0.2rem; border: 1px solid rgba(0, 0, 0, 0.5) }
|
|
.menu-label { padding: 0; font-weight: 800; }
|
|
|
|
.menu-list { margin-right: 0.8rem; }
|
|
select:focus { outline: none; }
|
|
.menu-list-item { background: ${wt.itemBackground}; color: ${wt.itemColor}; border: none; padding: 0.2rem; font-family: inherit;
|
|
font-variant: inherit; border-radius: var(--rounded); font-weight: 800; }
|
|
|
|
.menu-chart-title { padding: 0; font-size: 0.8rem; font-weight: 800; align-items: center}
|
|
.menu-chart-canvas { background: transparent; margin: 0.2rem 0 0.2rem 0.6rem; }
|
|
|
|
.menu-button { border: 0; background: ${wt.buttonBackground}; width: -webkit-fill-available; padding: 8px; margin: 8px; cursor: pointer; box-shadow: 4px 4px 4px 0 dimgrey;
|
|
border-radius: var(--rounded); justify-content: center; font-family: inherit; font-variant: inherit; font-size: 1rem; font-weight: 800; }
|
|
.menu-button:hover { background: ${wt.buttonHover}; box-shadow: 4px 4px 4px 0 black; }
|
|
.menu-button:focus { outline: none; }
|
|
|
|
.menu-checkbox { width: 2.8rem; height: 1rem; background: ${wt.itemBackground}; margin: 0.5rem 0.5rem 0 0; position: relative; border-radius: var(--rounded); }
|
|
.menu-checkbox:after { content: 'OFF'; color: ${wt.checkboxOff}; position: absolute; right: 0.2rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox:before { content: 'ON'; color: ${wt.checkboxOn}; position: absolute; left: 0.3rem; top: -0.4rem; font-weight: 800; font-size: 0.5rem; }
|
|
.menu-checkbox-label { width: 1.3rem; height: 0.8rem; cursor: pointer; position: absolute; top: 0.1rem; left: 0.1rem; z-index: 1; background: ${wt.checkboxOff};
|
|
border-radius: var(--rounded); transition: left 0.6s ease; }
|
|
|
|
input[type=checkbox] { visibility: hidden; }
|
|
input[type=checkbox]:checked + label { left: 1.4rem; background: ${wt.checkboxOn}; }
|
|
|
|
.menu-range { margin: 0.2rem 0.5rem 0 0; width: 3.5rem; background: transparent; color: ${wt.rangeBackground}; }
|
|
.menu-range:before { color: ${wt.rangeLabel}; margin: 0 0.4rem 0 0; font-weight: 800; font-size: 0.6rem; position: relative; top: 0.3rem; content: attr(value); }
|
|
|
|
input[type=range] { -webkit-appearance: none; }
|
|
input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 1rem; cursor: pointer; background: ${wt.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-moz-range-track { width: 100%; height: 1rem; cursor: pointer; background: ${wt.itemBackground}; border-radius: var(--rounded); border: 1px; }
|
|
input[type=range]::-webkit-slider-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${wt.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
input[type=range]::-moz-range-thumb { border: 1px solid #000000; margin-top: 0.05rem; height: 0.9rem; width: 1rem; border-radius: var(--rounded); background: ${wt.rangeBackground}; cursor: pointer; -webkit-appearance: none; }
|
|
|
|
.svg-background { fill:darkslategrey; cursor:pointer; opacity: 0.6; }
|
|
.svg-foreground { fill:white; cursor:pointer; opacity: 0.8; }
|
|
`,t=document.createElement("style");t.innerHTML=e,document.getElementsByTagName("head")[0].appendChild(t),Av=!0}var yv=class{constructor(t,n,r,a){a&&(wt={...wt,...a}),Yae(),this.createMenu(t,n,r),this.id=0,this.instance=Bc,Bc++,this._maxFPS=0,this.hidden=0}createMenu(t,n="",r={top:null,left:null,bottom:null,right:null}){this.menu=document.createElement("div"),this.menu.id=`menu-${Bc}`,this.menu.className="menu",r&&(r.top&&(this.menu.style.top=r.top),r.bottom&&(this.menu.style.bottom=r.bottom),r.left&&(this.menu.style.left=r.left),r.right&&(this.menu.style.right=r.right)),this.container=document.createElement("div"),this.container.id=`menu-container-${Bc}`,this.container.className="menu-container menu-container-fadein";let a=document.createElement("div");a.className="menu-title",a.id=`menu-title-${Bc}`;let s=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" style="width: 2rem; height: 2rem; vertical-align: top;">
|
|
<path d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h352a48 48 0 0 0 48-48V80a48 48 0 0 0-48-48zm-51.37 182.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-background"/>
|
|
<path d="M348.63 214.31L232.06 348.16a10.38 10.38 0 0 1-16.12 0L99.37 214.31C92.17 206 97.28 192 107.43 192h233.14c10.15 0 15.26 14 8.06 22.31z" class="svg-foreground"/>
|
|
</svg>`;n&&(a.innerHTML=`${n}${s}`),this.menu.appendChild(a),a.addEventListener("click",()=>{this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.menu.style.borderStyle=this.container.classList.contains("menu-container-fadeout")?"none":"solid"}),this.menu.appendChild(this.container),typeof t=="object"?t.appendChild(this.menu):document.getElementById(t).appendChild(this.menu)}get newID(){return this.id++,`menu-${this.instance}-${this.id}`}get ID(){return`menu-${this.instance}-${this.id}`}get width(){return this.menu.offsetWidth}get height(){return this.menu.offsetHeight}hide(){this.container.classList.contains("menu-container-fadein")&&(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"))}visible(){return this.container.classList.contains("menu-container-fadein")}toggle(t){if(this.container.classList.toggle("menu-container-fadeout"),this.container.classList.toggle("menu-container-fadein"),this.container.classList.contains("menu-container-fadein")&&t){let n=t.x||(t.touches&&t.touches[0]?t.touches[0].pageX:null);n&&(this.menu.style.left=`${n-this.menu.offsetWidth/2}px`),this.menu.offsetLeft<0&&(this.menu.style.left=0),this.menu.offsetLeft+this.menu.offsetWidth>window.innerWidth&&(this.menu.style.left=null,this.menu.style.right=0),this.menu.style.borderStyle="solid"}else this.menu.style.borderStyle="none"}addTitle(t){let n=document.createElement("div");return n.className="menu-title",n.id=this.newID,n.innerHTML=t,this.menu.appendChild(n),n.addEventListener("click",()=>{this.hidden=!this.hidden;let r=document.getElementsByClassName("menu");for(let a of r)a.style.display=this.hidden?"none":"block"}),n}addLabel(t){let n=document.createElement("div");return n.className="menu-item menu-label",n.id=this.newID,n.innerHTML=t,this.container.appendChild(n),n}addBool(t,n,r,a){let s=document.createElement("div");return s.className="menu-item",s.innerHTML=`<div class="menu-checkbox"><input class="menu-checkbox" type="checkbox" id="${this.newID}" ${n[r]?"checked":""}/><label class="menu-checkbox-label" for="${this.ID}"></label></div>${t}`,this.container.appendChild(s),s.addEventListener("change",i=>{n[r]=i.target.checked,a&&a(i.target.checked)}),s}async addList(t,n,r,a){let s=document.createElement("div");s.className="menu-item";let i="";for(let o of n)i+=`<option value="${o}" ${o===r?"selected":""}>${o}</option>`;return s.innerHTML=`<div class="menu-list"><select name="${this.ID}" class="menu-list-item">${i}</select><label for="${this.ID}"></label></div>${t}`,s.style.fontFamily=document.body.style.fontFamily,s.style.fontSize=document.body.style.fontSize,s.style.fontVariant=document.body.style.fontVariant,this.container.appendChild(s),s.addEventListener("change",o=>{a&&a(n[o.target.selectedIndex])}),s}addRange(t,n,r,a,s,i,o){let l=document.createElement("div");return l.className="menu-item",l.innerHTML=`<input class="menu-range" type="range" id="${this.newID}" min="${a}" max="${s}" step="${i}" value="${n[r]}">${t}`,this.container.appendChild(l),l.addEventListener("change",c=>{n[r]=parseInt(c.target.value)===parseFloat(c.target.value)?parseInt(c.target.value):parseFloat(c.target.value),c.target.setAttribute("value",c.target.value),o&&o(c.target.value)}),l.input=l.children[0],l}addHTML(t){let n=document.createElement("div");return n.className="menu-item",n.id=this.newID,t&&(n.innerHTML=t),this.container.appendChild(n),n}addButton(t,n,r){let a=document.createElement("button");return a.className="menu-item menu-button",a.style.fontFamily=document.body.style.fontFamily,a.style.fontSize=document.body.style.fontSize,a.style.fontVariant=document.body.style.fontVariant,a.type="button",a.id=this.newID,a.innerText=t,this.container.appendChild(a),a.addEventListener("click",()=>{a.innerText===t?a.innerText=n:a.innerText=t,r&&r(a.innerText!==t)}),a}addValue(t,n,r=""){let a=document.createElement("div");return a.className="menu-item",a.id=`menu-val-${t}`,a.innerText=`${t}: ${n}${r}`,this.container.appendChild(a),a}updateValue(t,n,r=""){let a=document.getElementById(`menu-val-${t}`);a?a.innerText=`${t}: ${n}${r}`:this.addValue(t,n)}addChart(t,n,r=150,a=40,s){s&&(wt.chartColor=s);let i=document.createElement("div");return i.className="menu-item menu-chart-title",i.id=this.newID,i.innerHTML=`<font color=${wt.chartColor}>${t}</font><canvas id="menu-canvas-${n}" class="menu-chart-canvas" width="${r}px" height="${a}px"></canvas>`,this.container.appendChild(i),i}async updateChart(t,n){if(!n||n.length===0)return;let r=document.getElementById(`menu-canvas-${t}`);if(!r)return;let a=r.getContext("2d");a.fillStyle=wt.background,a.fillRect(0,0,r.width,r.height);let s=r.width/n.length,i=1+Math.max(...n),o=r.height/i;for(let l=0;l<n.length;l++){let c=a.createLinearGradient(0,(i-n[l])*o,0,0);c.addColorStop(.1,wt.chartColor),c.addColorStop(.4,wt.background),a.fillStyle=c,a.fillRect(l*s,0,s-4,r.height),a.fillStyle=wt.background,a.font=`${s/1.5}px "Segoe UI"`,a.fillText(Math.round(n[l]),l*s+1,r.height-1,s-1)}}},Vc=yv;var Qae=`
|
|
#gl-bench { position: absolute; right: 1rem; bottom: 1rem; z-index:1000; -webkit-user-select: none; -moz-user-select: none; user-select: none; }
|
|
#gl-bench div { position: relative; display: block; margin: 4px; padding: 0 7px 0 10px; background: darkslategray; border-radius: 0.2rem; cursor: pointer; opacity: 0.9; }
|
|
#gl-bench svg { height: 60px; margin: 0 0px 0px 4px; }
|
|
#gl-bench text { font-size: 16px; font-family: 'Lato', 'Segoe UI'; dominant-baseline: middle; text-anchor: middle; }
|
|
#gl-bench .gl-mem { font-size: 12px; fill: white; }
|
|
#gl-bench .gl-fps { font-size: 13px; fill: white; }
|
|
#gl-bench line { stroke-width: 5; stroke: white; stroke-linecap: round; }
|
|
#gl-bench polyline { fill: none; stroke: white; stroke-linecap: round; stroke-linejoin: round; stroke-width: 3.5; }
|
|
#gl-bench rect { fill: black; }
|
|
#gl-bench .opacity { stroke: black; }
|
|
`,ese=`
|
|
<div class="gl-box">
|
|
<svg viewBox="0 0 55 60">
|
|
<text x="27" y="56" class="gl-fps">00 FPS</text>
|
|
<text x="30" y="8" class="gl-mem"></text>
|
|
<rect x="0" y="14" rx="4" ry="4" width="55" height="32"></rect>
|
|
<polyline class="gl-chart"></polyline>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-cpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-cpu" stroke-dasharray="0 27"/>
|
|
<path d="M5.35 43c-.464 0-.812.377-.812.812v1.16c-.783.1972-1.421.812-1.595 1.624h-1.16c-.435 0-.812.348-.812.812s.348.812.812.812h1.102v1.653H1.812c-.464 0-.812.377-.812.812 0 .464.377.812.812.812h1.131c.1943.783.812 1.392 1.595 1.595v1.131c0 .464.377.812.812.812.464 0 .812-.377.812-.812V53.15h1.653v1.073c0 .464.377.812.812.812.464 0 .812-.377.812-.812v-1.131c.783-.1943 1.392-.812 1.595-1.595h1.131c.464 0 .812-.377.812-.812 0-.464-.377-.812-.812-.812h-1.073V48.22h1.102c.435 0 .812-.348.812-.812s-.348-.812-.812-.812h-1.16c-.1885-.783-.812-1.421-1.595-1.624v-1.131c0-.464-.377-.812-.812-.812-.464 0-.812.377-.812.812v1.073H6.162v-1.073c0-.464-.377-.812-.812-.812zm.58 3.48h2.088c.754 0 1.363.609 1.363 1.363v2.088c0 .754-.609 1.363-1.363 1.363H5.93c-.754 0-1.363-.609-1.363-1.363v-2.088c0-.754.609-1.363 1.363-1.363z" style="fill: grey"></path>
|
|
</svg>
|
|
<svg viewBox="0 0 14 60" class="gl-gpu-svg">
|
|
<line x1="7" y1="38" x2="7" y2="11" class="opacity"/>
|
|
<line x1="7" y1="38" x2="7" y2="11" class="gl-gpu" stroke-dasharray="0 27"/>
|
|
<path d="M1.94775 43.3772a.736.736 0 10-.00416 1.472c.58535.00231.56465.1288.6348.3197.07015.18975.04933.43585.04933.43585l-.00653.05405v8.671a.736.736 0 101.472 0v-1.4145c.253.09522.52785.1495.81765.1495h5.267c1.2535 0 2.254-.9752 2.254-2.185v-3.105c0-1.2075-1.00625-2.185-2.254-2.185h-5.267c-.28865 0-.5635.05405-.8165.1495.01806-.16445.04209-.598-.1357-1.0787-.22425-.6072-.9499-1.2765-2.0125-1.2765zm2.9095 3.6455c.42435 0 .7659.36225.7659.8119v2.9785c0 .44965-.34155.8119-.7659.8119s-.7659-.36225-.7659-.8119v-2.9785c0-.44965.34155-.8119.7659-.8119zm4.117 0a2.3 2.3 0 012.3 2.3 2.3 2.3 0 01-2.3 2.3 2.3 2.3 0 01-2.3-2.3 2.3 2.3 0 012.3-2.3z" style="fill: grey"></path>
|
|
</svg>
|
|
</div>
|
|
`,gv=class{constructor(t,n={}){this.css=Qae,this.svg=ese,this.paramLogger=()=>{},this.chartLogger=()=>{},this.chartLen=20,this.chartHz=20,this.names=[],this.cpuAccums=[],this.gpuAccums=[],this.activeAccums=[],this.chart=new Array(this.chartLen),this.now=()=>performance&&performance.now?performance.now():Date.now(),this.updateUI=()=>{[].forEach.call(this.nodes["gl-gpu-svg"],o=>o.style.display=this.trackGPU?"inline":"none")},Object.assign(this,n),this.detected=0,this.finished=[],this.isFramebuffer=0,this.frameId=0;let r,a=0,s,i=o=>{++a<20?r=requestAnimationFrame(i):(this.detected=Math.ceil(1e3*a/(o-s)/70),cancelAnimationFrame(r)),s||(s=o)};if(requestAnimationFrame(i),t){let o=async(u,h)=>Promise.resolve(setTimeout(()=>{t.getError();let d=this.now()-u;h.forEach((p,f)=>{p&&(this.gpuAccums[f]+=d)})},0)),l=(u,h,d)=>{let p=h.now();u.apply(d,arguments),h.trackGPU&&h.finished.push(o(p,h.activeAccums.slice(0)))},c="drawElements";t[c]?t[c]=l(t[c],this,t):console.log("bench: cannot attach to webgl function")}if(!this.withoutUI){this.dom||(this.dom=document.body);let o=document.createElement("div");o.id="gl-bench",this.dom.appendChild(o),this.dom.insertAdjacentHTML("afterbegin",'<style id="gl-bench-style">'+this.css+"</style>"),this.dom=o,this.dom.addEventListener("click",()=>{this.trackGPU=!this.trackGPU,this.updateUI()}),this.paramLogger=((l,c,u)=>{let h=["gl-cpu","gl-gpu","gl-mem","gl-fps","gl-gpu-svg","gl-chart"],d={...h};return h.forEach(p=>d[p]=c.getElementsByClassName(p)),this.nodes=d,(p,f,m,A,y,g,b)=>{d["gl-cpu"][p].style.strokeDasharray=(f*.27).toFixed(0)+" 100",d["gl-gpu"][p].style.strokeDasharray=(m*.27).toFixed(0)+" 100",d["gl-mem"][p].innerHTML=u[p]?u[p]:A?"mem: "+A.toFixed(0)+"mb":"",d["gl-fps"][p].innerHTML="FPS: "+y.toFixed(1),l(u[p],f,m,A,y,g,b)}})(this.paramLogger,this.dom,this.names),this.chartLogger=((l,c)=>{let u={"gl-chart":c.getElementsByClassName("gl-chart")};return(h,d,p)=>{let f="",m=d.length;for(let A=0;A<m;A++){let y=(p+A+1)%m;d[y]!==void 0&&(f=f+" "+(55*A/(m-1)).toFixed(1)+","+(45-d[y]*22/60/this.detected).toFixed(1))}u["gl-chart"][h].setAttribute("points",f),l(this.names[h],d,p)}})(this.chartLogger,this.dom)}}addUI(t){this.names.indexOf(t)===-1&&(this.names.push(t),this.dom&&(this.dom.insertAdjacentHTML("beforeend",this.svg),this.updateUI()),this.cpuAccums.push(0),this.gpuAccums.push(0),this.activeAccums.push(!1))}nextFrame(t){this.frameId++;let n=t||this.now();if(this.frameId<=1)this.paramFrame=this.frameId,this.paramTime=n;else{let r=n-this.paramTime;if(r>=1e3){let a=this.frameId-this.paramFrame,s=a/r*1e3;for(let i=0;i<this.names.length;i++){let o=this.cpuAccums[i]/r*100,l=this.gpuAccums[i]/r*100,c=performance&&performance.memory?performance.memory.usedJSHeapSize/(1<<20):0;this.paramLogger(i,o,l,c,s,r,a),this.cpuAccums[i]=0,Promise.all(this.finished).then(()=>{this.gpuAccums[i]=0,this.finished=[]})}this.paramFrame=this.frameId,this.paramTime=n}}if(!this.detected||!this.chartFrame)this.chartFrame=this.frameId,this.chartTime=n,this.circularId=0;else{let r=n-this.chartTime,a=this.chartHz*r/1e3;for(;--a>0&&this.detected;){let i=(this.frameId-this.chartFrame)/r*1e3;this.chart[this.circularId%this.chartLen]=i;for(let o=0;o<this.names.length;o++)this.chartLogger(o,this.chart,this.circularId);this.circularId++,this.chartFrame=this.frameId,this.chartTime=n}}}begin(t){this.updateAccums(t)}end(t){this.updateAccums(t)}updateAccums(t){let n=this.names.indexOf(t);n===-1&&(n=this.names.length,this.addUI(t));let r=this.now(),a=r-this.t0;for(let s=0;s<n+1;s++)this.activeAccums[s]&&(this.cpuAccums[s]+=a);this.activeAccums[n]=!this.activeAccums[n],this.t0=r}},xv=gv;var Hr={},se=new mv(Hr),ie={baseColor:"rgba(173, 216, 230, 0.3)",baseBackground:"rgba(50, 50, 50, 1)",baseLabel:"rgba(173, 216, 230, 1)",baseFontProto:'small-caps {size} "Segoe UI"',baseLineWidth:12,crop:!0,columns:2,busy:!1,facing:!0,useWorker:!1,worker:"worker.js",samples:["../assets/sample6.jpg","../assets/sample1.jpg","../assets/sample4.jpg","../assets/sample5.jpg","../assets/sample3.jpg","../assets/sample2.jpg"],compare:"../assets/sample-me.jpg",drawBoxes:!0,drawPoints:!1,drawPolygons:!0,fillPolygons:!1,useDepth:!0,console:!0,maxFPSframes:10,modelsPreload:!0,menuWidth:0,menuHeight:0,camera:{},detectFPS:[],drawFPS:[],buffered:!1,drawThread:null,detectThread:null,framesDraw:0,framesDetect:0,bench:!1},xe={},d1,ki,p1={};function tse(...e){if(!Array.isArray(e))return e;let t="";for(let n of e)typeof n=="object"?t+=JSON.stringify(n).replace(/{|}|"|\[|\]/g,"").replace(/,/g,", "):t+=n;return t}function $n(...e){let t=new Date,n=`${t.getHours().toString().padStart(2,"0")}:${t.getMinutes().toString().padStart(2,"0")}:${t.getSeconds().toString().padStart(2,"0")}.${t.getMilliseconds().toString().padStart(3,"0")}`;ie.console&&console.log(n,...e)}function Hn(e){document.getElementById("status").innerText=e}var Ii;async function nse(e){var n,r,a,s;if(document.getElementById("compare-container").style.display=se.config.face.embedding.enabled?"block":"none",!se.config.face.embedding.enabled||((n=e==null?void 0:e.face)==null?void 0:n.length)>0&&((r=e==null?void 0:e.face[0].embedding)==null?void 0:r.length)!==192)return;Ii||(Ii=e,document.getElementById("compare-canvas").getContext("2d").drawImage(Ii.canvas,0,0,200,200));let t=se.simmilarity((a=Ii==null?void 0:Ii.face[0])==null?void 0:a.embedding,(s=e==null?void 0:e.face[0])==null?void 0:s.embedding);document.getElementById("simmilarity").innerText=`simmilarity: ${Math.trunc(1e3*t)/10}%`}var wv=performance.now();async function f1(e){let t=p1,n=document.getElementById("canvas");ie.drawFPS.push(1e3/(performance.now()-wv)),ie.drawFPS.length>ie.maxFPSframes&&ie.drawFPS.shift(),wv=performance.now(),await xe.process.updateChart("FPS",ie.detectFPS),(ie.buffered||!t.canvas)&&(t.canvas=await se.image(e,Hr));let r=n.getContext("2d");r.fillStyle=ie.baseBackground,r.fillRect(0,0,n.width,n.height),t.canvas?(t.canvas.width!==n.width&&(n.width=t.canvas.width),t.canvas.height!==n.height&&(n.height=t.canvas.height),r.drawImage(t.canvas,0,0,t.canvas.width,t.canvas.height,0,0,t.canvas.width,t.canvas.height)):r.drawImage(e,0,0,e.width,e.height,0,0,n.width,n.height),await Wc.face(t.face,n,ie,se.facemesh.triangulation),await Wc.body(t.body,n,ie),await Wc.hand(t.hand,n,ie),await Wc.gesture(t.gesture,n,ie),await nse(t);let a=se.tf.engine(),s=a.backendInstance?`gpu: ${(a.backendInstance.numBytesInGPU?a.backendInstance.numBytesInGPU:0).toLocaleString()} bytes`:"",i=`system: ${a.state.numBytes.toLocaleString()} bytes ${s} | tensors: ${a.state.numTensors.toLocaleString()}`,o=t.canvas?`processing: ${t.canvas.width} x ${t.canvas.height}`:"",l=Math.trunc(10*ie.detectFPS.reduce((h,d)=>h+d,0)/ie.detectFPS.length)/10,c=Math.trunc(10*ie.drawFPS.reduce((h,d)=>h+d,0)/ie.drawFPS.length)/10,u=ie.detectFPS.length>5&&l<5?'<font color="lightcoral">warning: your performance is low: try switching to higher performance backend, lowering resolution or disabling some models</font>':"";document.getElementById("log").innerHTML=`
|
|
video: ${ie.camera.name} | facing: ${ie.camera.facing} | screen: ${window.innerWidth} x ${window.innerHeight} camera: ${ie.camera.width} x ${ie.camera.height} ${o}<br>
|
|
backend: ${se.tf.getBackend()} | ${i}<br>
|
|
performance: ${tse(t.performance)}ms FPS process:${l} refresh:${c}<br>
|
|
${u}<br>
|
|
`,ie.framesDraw++,ie.lastFrame=performance.now(),ie.buffered?ie.drawThread=requestAnimationFrame(()=>f1(e,n)):!ie.buffered&&ie.drawThread&&($n("stopping buffered refresh"),cancelAnimationFrame(ie.drawThread),ie.drawThread=null)}async function m1(){var c;if(ie.busy)return null;ie.busy=!0;let e=document.getElementById("video"),t=document.getElementById("canvas"),n=document.getElementById("log"),r=e.srcObject?e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused:!1,a="";if(Hn("setting up camera"),!navigator.mediaDevices)return a="camera access not supported",n.innerText+=`
|
|
${a}`,$n(a),Hn(a),ie.busy=!1,a;let s,i={audio:!1,video:{facingMode:ie.facing?"user":"environment",resizeMode:ie.crop?"crop-and-scale":"none"}};window.innerWidth>window.innerHeight?i.video.width={ideal:window.innerWidth}:i.video.height={ideal:window.innerHeight-document.getElementById("menubar").offsetHeight};try{s=await navigator.mediaDevices.getUserMedia(i)}catch(u){return u.name==="PermissionDeniedError"||u.name==="NotAllowedError"?a="camera permission denied":u.name==="SourceUnavailableError"?a="camera not available":a=`camera error: ${u.message||u}`,n.innerText+=`
|
|
${a}`,Hn(a),$n("camera error:",u),ie.busy=!1,a}if(s)e.srcObject=s;else return ie.busy=!1,"camera stream empty";let o=s.getVideoTracks()[0],l=o.getSettings();return ie.camera={name:(c=o.label)==null?void 0:c.toLowerCase(),width:l.width,height:l.height,facing:l.facingMode==="user"?"front":"back"},new Promise(u=>{e.onloadeddata=async()=>{e.width=e.videoWidth,e.height=e.videoHeight,t.width=e.width,t.height=e.height,t.style.width=t.width>t.height?"100vw":"",t.style.height=t.width>t.height?"":"100vh",ie.menuWidth.input.setAttribute("value",e.width),ie.menuHeight.input.setAttribute("value",e.height);let h=Math.trunc(window.devicePixelRatio*(8+4*t.width/window.innerWidth));ie.baseFont=ie.baseFontProto.replace(/{size}/,`${h}px`),ie.baseLineHeight=h+2,r&&e.play(),r&&!ie.detectThread&&Uc(e,t),ie.busy=!1,Hn(""),u()}})}function _v(){if(!ki){let e=null;ki=new xv(e,{trackGPU:!1,chartHz:20,chartLen:20}),ki.begin()}}function rse(e,t,n,r){d1||($n("creating worker thread"),d1=new Worker(ie.worker,{type:"module"}),d1.addEventListener("message",a=>{a.data.result.performance&&a.data.result.performance.total&&ie.detectFPS.push(1e3/a.data.result.performance.total),ie.detectFPS.length>ie.maxFPSframes&&ie.detectFPS.shift(),ie.bench&&(ki||_v(),ki.nextFrame(r)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=ie.bench?"block":"none"),p1=a.data.result,ie.framesDetect++,ie.drawThread||f1(e),ie.detectThread=requestAnimationFrame(s=>Uc(e,n,s))})),d1.postMessage({image:t.data.buffer,width:n.width,height:n.height,userConfig:Hr},[t.data.buffer])}function Uc(e,t,n){var a;if(!(e.srcObject&&e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState>2&&!e.paused)&&e.srcObject){ie.drawThread&&cancelAnimationFrame(ie.drawThread),ie.detectThread&&cancelAnimationFrame(ie.detectThread),ie.drawThread=null,ie.detectThread=null,e.paused?$n("camera paused"):e.srcObject.getVideoTracks()[0].readyState==="live"&&e.readyState<=2?setTimeout(()=>Uc(e,t),500):$n(`camera not ready: track state: ${(a=e.srcObject)==null?void 0:a.getVideoTracks()[0].readyState} stream state: ${e.readyState}`),clearTimeout(ie.drawThread),ie.drawThread=null,$n("frame statistics: process:",ie.framesDetect,"refresh:",ie.framesDraw),$n("memory",se.tf.engine().memory());return}if(Hn(""),ie.useWorker){let s=typeof OffscreenCanvas!="undefined"?new OffscreenCanvas(t.width,t.height):document.createElement("canvas");s.width=t.width,s.height=t.height;let i=s.getContext("2d");i.drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height);let o=i.getImageData(0,0,t.width,t.height);rse(e,o,t,Hr,n)}else se.detect(e,Hr).then(s=>{s.performance&&s.performance.total&&ie.detectFPS.push(1e3/s.performance.total),ie.detectFPS.length>ie.maxFPSframes&&ie.detectFPS.shift(),ie.bench&&(ki||_v(),ki.nextFrame(n)),document.getElementById("gl-bench")&&(document.getElementById("gl-bench").style.display=ie.bench?"block":"none"),s.error?($n(s.error),document.getElementById("log").innerText+=`
|
|
Human error: ${s.error}`):(p1=s,ie.drawThread||f1(e),ie.framesDetect++,ie.detectThread=requestAnimationFrame(i=>Uc(e,t,i)))})}async function ase(e){return new Promise(t=>{let n=new Image;n.onload=async()=>{$n("Processing image:",n.src);let r=document.getElementById("canvas");n.width=n.naturalWidth,n.height=n.naturalHeight,r.width=se.config.filter.width&&se.config.filter.width>0?se.config.filter.width:n.naturalWidth,r.height=se.config.filter.height&&se.config.filter.height>0?se.config.filter.height:n.naturalHeight,p1=await se.detect(n,Hr),await f1(n);let s=document.createElement("canvas");s.className="thumbnail",s.width=window.innerWidth/(ie.columns+.1),s.height=r.height/(window.innerWidth/s.width),s.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,s.width,s.height),document.getElementById("samples-container").appendChild(s),n.src="",t(!0)},n.src=e})}async function bv(){Hr.videoOptimized=!0,document.getElementById("samples-container").style.display="none",document.getElementById("canvas").style.display="block";let e=document.getElementById("video"),t=document.getElementById("canvas");if(e.srcObject!==null&&!e.paused)document.getElementById("play").style.display="block",document.getElementById("btnStart").className="button button-start",document.getElementById("btnStart").innerHTML="start<br>video",Hn("paused"),e.pause();else{let n=await m1();if(n)Hn(n);else{document.getElementById("play").style.display="none";for(let r of Object.values(xe))r.hide();Hn(""),document.getElementById("btnStart").className="button button-stop",document.getElementById("btnStart").innerHTML="pause<br>video",await e.play(),ie.detectThread||Uc(e,t)}}}async function sse(){document.getElementById("play").style.display="none",Hr.videoOptimized=!1;let e=Math.trunc(window.devicePixelRatio*(8+4*ie.columns));ie.baseFont=ie.baseFontProto.replace(/{size}/,`${e}px`),ie.baseLineHeight=e+2,document.getElementById("canvas").style.display="none",document.getElementById("samples-container").style.display="block",$n("Running detection of sample images"),Hn("processing images"),document.getElementById("samples-container").innerHTML="";for(let t of ie.samples)await ase(t);Hn("")}function ise(){let e=[];window.innerWidth>800?e=[`${document.getElementById("btnDisplay").offsetLeft-50}px`,`${document.getElementById("btnImage").offsetLeft-50}px`,`${document.getElementById("btnProcess").offsetLeft-50}px`,`${document.getElementById("btnModel").offsetLeft-50}px`]:e=["0rem","11rem","21.1rem","33rem"],xe.display=new Vc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[0]}),xe.display.addBool("perf monitor",ie,"bench",t=>ie.bench=t),xe.display.addBool("buffered output",ie,"buffered",t=>ie.buffered=t),xe.display.addBool("crop & scale",ie,"crop",t=>{ie.crop=t,m1()}),xe.display.addBool("camera facing",ie,"facing",t=>{ie.facing=t,m1()}),xe.display.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.display.addBool("use 3D depth",ie,"useDepth"),xe.display.addBool("draw boxes",ie,"drawBoxes"),xe.display.addBool("draw polygons",ie,"drawPolygons"),xe.display.addBool("Fill Polygons",ie,"fillPolygons"),xe.display.addBool("draw points",ie,"drawPoints"),xe.image=new Vc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[1]}),xe.image.addBool("enabled",se.config.filter,"enabled",t=>se.config.filter.enabled=t),ie.menuWidth=xe.image.addRange("image width",se.config.filter,"width",0,3840,10,t=>se.config.filter.width=parseInt(t)),ie.menuHeight=xe.image.addRange("image height",se.config.filter,"height",0,2160,10,t=>se.config.filter.height=parseInt(t)),xe.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.image.addRange("brightness",se.config.filter,"brightness",-1,1,.05,t=>se.config.filter.brightness=parseFloat(t)),xe.image.addRange("contrast",se.config.filter,"contrast",-1,1,.05,t=>se.config.filter.contrast=parseFloat(t)),xe.image.addRange("sharpness",se.config.filter,"sharpness",0,1,.05,t=>se.config.filter.sharpness=parseFloat(t)),xe.image.addRange("blur",se.config.filter,"blur",0,20,1,t=>se.config.filter.blur=parseInt(t)),xe.image.addRange("saturation",se.config.filter,"saturation",-1,1,.05,t=>se.config.filter.saturation=parseFloat(t)),xe.image.addRange("hue",se.config.filter,"hue",0,360,5,t=>se.config.filter.hue=parseInt(t)),xe.image.addRange("pixelate",se.config.filter,"pixelate",0,32,1,t=>se.config.filter.pixelate=parseInt(t)),xe.image.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.image.addBool("negative",se.config.filter,"negative",t=>se.config.filter.negative=t),xe.image.addBool("sepia",se.config.filter,"sepia",t=>se.config.filter.sepia=t),xe.image.addBool("vintage",se.config.filter,"vintage",t=>se.config.filter.vintage=t),xe.image.addBool("kodachrome",se.config.filter,"kodachrome",t=>se.config.filter.kodachrome=t),xe.image.addBool("technicolor",se.config.filter,"technicolor",t=>se.config.filter.technicolor=t),xe.image.addBool("polaroid",se.config.filter,"polaroid",t=>se.config.filter.polaroid=t),xe.process=new Vc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[2]}),xe.process.addList("backend",["cpu","webgl","wasm","humangl"],se.config.backend,t=>se.config.backend=t),xe.process.addBool("async operations",se.config,"async",t=>se.config.async=t),xe.process.addBool("enable profiler",se.config,"profile",t=>se.config.profile=t),xe.process.addBool("memory shield",se.config,"deallocate",t=>se.config.deallocate=t),xe.process.addBool("use web worker",ie,"useWorker"),xe.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.process.addLabel("model parameters"),xe.process.addRange("max objects",se.config.face.detector,"maxFaces",1,50,1,t=>{se.config.face.detector.maxFaces=parseInt(t),se.config.body.maxDetections=parseInt(t),se.config.hand.maxHands=parseInt(t)}),xe.process.addRange("skip frames",se.config.face.detector,"skipFrames",0,50,1,t=>{se.config.face.detector.skipFrames=parseInt(t),se.config.face.emotion.skipFrames=parseInt(t),se.config.face.age.skipFrames=parseInt(t),se.config.hand.skipFrames=parseInt(t)}),xe.process.addRange("min confidence",se.config.face.detector,"minConfidence",0,1,.05,t=>{se.config.face.detector.minConfidence=parseFloat(t),se.config.face.gender.minConfidence=parseFloat(t),se.config.face.emotion.minConfidence=parseFloat(t),se.config.hand.minConfidence=parseFloat(t)}),xe.process.addRange("score threshold",se.config.face.detector,"scoreThreshold",.1,1,.05,t=>{se.config.face.detector.scoreThreshold=parseFloat(t),se.config.hand.scoreThreshold=parseFloat(t),se.config.body.scoreThreshold=parseFloat(t)}),xe.process.addRange("overlap",se.config.face.detector,"iouThreshold",.1,1,.05,t=>{se.config.face.detector.iouThreshold=parseFloat(t),se.config.hand.iouThreshold=parseFloat(t)}),xe.process.addBool("detection rotation",se.config.face.detector,"rotation",t=>{se.config.face.detector.rotation=t,se.config.hand.rotation=t}),xe.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.process.addButton("process sample images","process images",()=>sse()),xe.process.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.process.addChart("FPS","FPS"),xe.models=new Vc(document.body,"",{top:`${document.getElementById("menubar").offsetHeight}px`,left:e[3]}),xe.models.addBool("face detect",se.config.face,"enabled",t=>se.config.face.enabled=t),xe.models.addBool("face mesh",se.config.face.mesh,"enabled",t=>se.config.face.mesh.enabled=t),xe.models.addBool("face iris",se.config.face.iris,"enabled",t=>se.config.face.iris.enabled=t),xe.models.addBool("face age",se.config.face.age,"enabled",t=>se.config.face.age.enabled=t),xe.models.addBool("face gender",se.config.face.gender,"enabled",t=>se.config.face.gender.enabled=t),xe.models.addBool("face emotion",se.config.face.emotion,"enabled",t=>se.config.face.emotion.enabled=t),xe.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.models.addBool("body pose",se.config.body,"enabled",t=>se.config.body.enabled=t),xe.models.addBool("hand pose",se.config.hand,"enabled",t=>se.config.hand.enabled=t),xe.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.models.addBool("gestures",se.config.gesture,"enabled",t=>se.config.gesture.enabled=t),xe.models.addHTML('<hr style="border-style: inset; border-color: dimgray">'),xe.models.addBool("face compare",se.config.face.embedding,"enabled",t=>{se.config.face.embedding.enabled=t,Ii=null}),document.getElementById("btnDisplay").addEventListener("click",t=>xe.display.toggle(t)),document.getElementById("btnImage").addEventListener("click",t=>xe.image.toggle(t)),document.getElementById("btnProcess").addEventListener("click",t=>xe.process.toggle(t)),document.getElementById("btnModel").addEventListener("click",t=>xe.models.toggle(t)),document.getElementById("btnStart").addEventListener("click",()=>bv()),document.getElementById("play").addEventListener("click",()=>bv())}async function ose(){$n("Demo starting ..."),$n("Browser:",navigator==null?void 0:navigator.userAgent),ise(),document.getElementById("log").innerText=`Human: version ${se.version}`,ie.modelsPreload&&!ie.useWorker&&(Hn("loading"),await se.load(Hr)),ie.useWorker||(Hn("initializing"),await se.warmup(Hr)),Hn("human: ready"),document.getElementById("loader").style.display="none",document.getElementById("play").style.display="block",$n("Demo ready...")}window.onload=ose;window.onresize=m1;
|
|
/**
|
|
* @license
|
|
* Copyright 2017 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google Inc. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the License);
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an AS IS BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/** @license See the LICENSE file. */
|
|
//# sourceMappingURL=demo-browser-index.js.map
|